我有一个ASP.NET MVC项目,我使用jquery.validate.unobtrusive来执行值的客户端验证。但是,我在验证日期方面遇到了问题。该系统需要支持多种文化,但目前大多数用户来自英国,因此请使用英国日期格式。
默认情况下,即使输入了有效日期,也无法验证,说明日期字段必须是有效日期。
我在网上找到以下代码来更改日期格式:
$.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");
};
然而,这似乎不再有效 - 我得到了一个" Globalize.culture不是一个功能"错误。但是,如果我删除该行,我在任何字段都没有得到任何验证。
您似乎需要下载jquery.globalize才能使用该代码,但是现在已经从Github中提取并合并到更新版本的JQuery中(由于与其他库的冲突,我无法使用)。
使用新的Globalize似乎也不起作用。
是否有更简单的方法来执行适用于任何文化的日期验证?或者是否有一个链接到旧版本的Globalize,它将按照建议工作?
答案 0 :(得分:0)
以下是一些类似的问题: HTML5 change datetime format
jquery ui datepicker and mvc view model type datetime
答案似乎提出了3种方法:
1)使用jquery globalize覆盖不显眼的jquery
2)添加以下脚本(用于datepicker控件):
$.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转换为字符串,因为它是readonly。