Emi*_*mil 2 asp.net date-format datefield jquery-ui-datepicker asp.net-mvc-5
最后几天我很难说服MVC5项目按照我的意愿处理日期.经过密集的谷歌搜索后,我尝试了很多次,以使其正常工作,但没有成功.
这是问题所在:
我需要以dd.MM.yyyy格式(即2015年7月15日)在我的网页上显示和编辑日期.对于编辑我还需要使用jquery ui datepicker.这里的事情是我已经能够成功设置该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;
Run Code Online (Sandbox Code Playgroud)
我认为这是我需要做的一切,使日期以指定的格式显示,并强制用户以正确的格式填充日期文本框.
正如[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>
Run Code Online (Sandbox Code Playgroud)
}
jquery datepicker具有以下实现:
$('.datecontrol').datepicker({
onClose: function () { $(this).valid(); },
minDate: "-1M",
dateFormat: "dd.mm.yy",
});
Run Code Online (Sandbox Code Playgroud)
所以即使是datepicker也知道格式应该是什么样子.
最后一个组件是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;
},
''
);
Run Code Online (Sandbox Code Playgroud)
我知道日期是以某种文化中立格式传递给服务器的,但我认为当我用所请求的格式在许多地方修饰代码时,这将确保转换为该文化中性格式将正确完成.还是我错过了别的什么?
谢谢
您的问题在于您没有Culture为您的应用程序设置正确的问题.您的请求最终在具有month-day-year订单(可能是在下en-US)的文化下执行,从而导致您出现问题.
最简单的解决方案是设置实际具有day-month-year订单的文化和.您的日期分隔符web.config,例如:
<configuration>
<system.web>
<globalization uiCulture="de-DE" culture="de-DE" />
...
Run Code Online (Sandbox Code Playgroud)
https://msdn.microsoft.com/en-us/library/bz9tc508%28v=vs.140%29.aspx
在将发布的数据解析并绑定到模型/参数时,MVC使用当前文化. 建议在整个范围内使用相同的日期分隔符 - html,client,javascript,server culture,...
| 归档时间: |
|
| 查看次数: |
1908 次 |
| 最近记录: |