我有一个ASP。. NET MVC项目,我使用jquery.validate.unobtrusive来执行值的客户端验证。然而,我在验证日期时遇到了问题。系统需要支持多种文化,但是目前大多数用户来自英国,所以使用英国日期格式。
默认情况下,即使输入了有效的日期,也会导致验证失败,说明date字段必须是有效的日期。
我在网上找到了以下代码来更改日期格式:
$.culture = Globalize.culture("en-GB");
$.validator.methods.date = function (value, element) {
//This is not ideal but Chrome passes dates through in ISO1901 format regardless of locale
//and despite displaying in the specified format.
return this.optional(element)
|| Globalize.parseDate(value, "@ViewBag.DateFormat", "en-GB")
|| Globalize.parseDate(value, "yyyy-mm-dd");
};
然而,这似乎不再是有效的-我得到一个"全球化。文化不是一个函数"错误"。但是,如果我删除了这一行,我就不会在任何字段上得到任何验证。
看来你需要下载jquery。globalize来使用这些代码,但是这些代码现在已经从Github中拉出来并合并到新版本的JQuery中(由于与其他库冲突,我无法使用)。
使用新的Globalize似乎也不起作用。
是否有一种更简单的方法来执行日期验证,它将适用于任何文化?或者有一个链接到全球化的旧版本,可以像建议的那样工作?
这里有几个类似的问题:HTML5更改日期时间格式
jquery UI datepicker和MVC视图模型类型datetime
答案似乎暗示了三种方法:
1)使用jquery globalize覆盖不显眼的jquery2)添加以下脚本(用于日期选择器控制):
$.validator.addMethod('date', function (value, element) {
if (this.optional(element)) {
return true;
}
var valid = true;
try {
$.datepicker.parseDate('dd/mm/yy', value);
}
catch (err) {
valid = false;
}
return valid;
});
$('#dt1').datepicker({ dateFormat: 'dd/mm/yy' });
3)使用隐藏输入
不幸的是,在我的情况下,没有一个解决方案工作,我不得不将模型字段从datetime转换为字符串,因为它是只读的。