最后几天,我很难说服MVC5项目使用我想要的日期。经过密集的谷歌搜索后,我尝试了许多尝试以使其正常运行,但没有成功。
这是问题所在:
我需要以dd.MM.yyyy(即2015年7月15日)的格式显示和编辑日期。为了进行编辑,我还需要使用jquery ui datepicker。这里的事情是,我已经能够成功设置该日期选择器以请求的格式显示日期,而且jquery验证现在可以正确验证给定格式的日期。到目前为止,对于UI来说还不错。当我单击“提交”按钮时,问题立即出现-出现错误消息,例如:
值“ 15.07.2015”对于“开始日期”无效。
经过简短的调查,我发现将日期传递给服务器时,日期已转换格式-代替dd.MM.yyyy,该日期被视为MM.dd.yyyy。换句话说,仅当日期的日期部分大于12时才会弹出错误。
以下是我的代码中的一些要点:
在我的约会模型中,我有这个:
[Required]
[Display(Name = "Start Date")]
[DataType(DataType.Date)]
[UIHint("Date")]
[DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}", ApplyFormatInEditMode = true)]
public DateTime DateStarts;
我认为,要做的就是使该日期以指定的格式显示,并迫使用户以正确的格式在文本框中填充日期。
如[UIHint(“ Date”)]中所给,我有自己的模板,用于渲染文本框以编辑日期。该模板的实现如下:
@model Nullable<DateTime>
@{
DateTime dt = DateTime.Now;
if (Model != null)
{
dt = (System.DateTime)Model;
}
@Html.TextBox("", dt.ToString("dd.MM.yyyy"), new { @class = "form-control datecontrol", type = "text", data_val_date = "Field must have format dd.MM.yyyy" })
<i class="fa fa-calendar form-control-feedback lowerzindex"></i>
}
jQuery datepicker具有以下实现:
$('.datecontrol').datepicker({
onClose: function () { $(this).valid(); },
minDate: "-1M",
dateFormat: "dd.mm.yy",
});
因此,即使日期选择器也知道格式应为什么样。
最后一个组件是通过jquery.validation进行的验证:
$.validator.addMethod(
'date',
function (value, element, params) {
if (this.optional(element)) {
return true;
};
var result = false;
try {
$.datepicker.parseDate('dd.mm.yy', value);
result = true;
} catch (err) {
result = false;
}
return result;
},
''
);
我知道日期是以某种文化中立格式传递给服务器的,但是我认为当我在许多地方使用所需格式装饰代码时,这将确保正确转换为该文化中立格式。还是我想念其他东西?
谢谢
您的问题在于您没有Culture
为应用程序设置适当的事实。您的请求最终在具有month-day-year
顺序的文化下执行(可能在之下en-US
),这会导致您遇到问题。
最简单的解决方案是在您的中设置实际具有day-month-year
顺序和.
日期分隔符的区域性,web.config
例如:
<configuration>
<system.web>
<globalization uiCulture="de-DE" culture="de-DE" />
...
https://msdn.microsoft.com/zh-CN/library/bz9tc508%28v=vs.140%29.aspx
当将发布的数据解析并绑定到模型/参数时,MVC使用当前的区域性。建议在整个范围内使用相同的日期分隔符-html,客户端,javascript,服务器区域性,...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句