我按照手动升级的说明将mvc 3网络应用升级到了mvc 4。一切顺利,应用程序在IE9中运行。我的表单包含几种数据类型的字段,包括客户端和服务器端验证,并且在提交表单时都能正确处理。
但是当我使用其他浏览器时 - 使用Firefox 8,Chrome 15和Safari 5.1.1测试 - 在验证日期字段时失败。我正在使用dt-MM-yyyy格式的'pt-PT'文化和日期,正如我所说,在IE9中他们通过验证,但在其他浏览器上它表示该字段不是有效日期。 / p>
TIA
若阿金
答案 0 :(得分:8)
我发现问题出在JQuery验证中。它调用javascript Date构造函数来检查日期是否有效:
// http://docs.jquery.com/Plugins/Validation/Methods/date
date: function(value, element) {
return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
},
由于javascript Date构造函数需要yyyy-MM-dd格式的日期,因此以葡萄牙语格式dd-MM-yyy返回日期无效。
例外情况是IE不返回Invalid但是日期与我们引入的日期不同。
解决方案是创建一个jquery.validate-pt.js,其代码覆盖了我们格式正确的验证:
$.validator.methods.date = function (value, element) {
return this.optional(element) || ( /^\d{1,2}[\/-]\d{1,2}[\/-]\d{4}(\s\d{2}:\d{2}(:\d{2})?)?$/.test(value)
&& !/Invalid|NaN/.test(new Date(value.replace("/", "-").split("-")[2], value.replace("/", "-").split("-")[1], value.replace("/", "-").split("-")[0])));
}