mrt*_*181 6 validation asp.net-mvc datetime jquery-ui datepicker
我正在使用jQuery的datepicker和asp.net MVC4.datepicker适用于Firefox,但在IE7中,我通过asp.net的验证得到消息,该字段不是日期.
这是datepicker的代码
if (!Modernizr.inputtypes.date) {
$(function() {
$.datepicker.setDefaults($.datepicker.regional['en-GB']);
$(".datefield").datepicker();
});
}
Run Code Online (Sandbox Code Playgroud)
这是我在Web.config中的全球化设置
<globalization uiCulture="en-GB" culture="en-GB" />
例如,在Firefox中,日期显示为"19/03/2012"字符串,并由asp.net的验证设置(客户端和服务器端)接受.在IE7中,客户端不接受相同的日期字符串.如果我将其更改为"03/19/2012",则客户端接受日期,但服务器会抛出异常 - "InvalidOperationException.可为空的对象必须具有值."
我的viewModel使用一个可以为null的DateTime,我将其转换为控制器post动作中的非null-null DateTime.这适用于Firefox,但在IE7中,viewModel中日期的值为null.问题是什么?
Dar*_*rov 13
以下行没有任何作用:
$.datepicker.setDefaults($.datepicker.regional['en-GB']);
Run Code Online (Sandbox Code Playgroud)
如果您不包含ASP.NET MVC 4模板中默认不包含的相应语言文件.
您可以尝试明确设置格式:
$.datepicker.setDefaults({ dateFormat: 'dd/mm/yy' });
Run Code Online (Sandbox Code Playgroud)
但这仅涉及在datepicker中选择日期后如何格式化日期.它与验证无关.
客户端验证由jquery.validate插件执行,插件又使用浏览器当前配置的文化(这可能解释您在FF和IE之间观察到的差异,例如,一个可能配置为使用en-GB而另一个使用en-US )或ISO日期.
您可以覆盖此自定义验证并使其使用您的自定义格式,以确保这将跨浏览器工作:
if (!Modernizr.inputtypes.date) {
$(function () {
$.datepicker.setDefaults({ dateFormat: 'dd/mm/yy' });
$('.datefield').datepicker();
});
jQuery.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)
| 归档时间: |
|
| 查看次数: |
16936 次 |
| 最近记录: |