MVC 4:Firefox,Chrome,Safari中的日期验证错误 - IE确定

时间:2011-11-29 16:32:22

标签: firefox datetime google-chrome safari asp.net-mvc-4

我按照手动升级的说明将mvc 3网络应用升级到了mvc 4。一切顺利,应用程序在IE9中运行。我的表单包含几种数据类型的字段,包括客户端和服务器端验证,并且在提交表单时都能正确处理。

但是当我使用其他浏览器时 - 使用Firefox 8,Chrome 15和Safari 5.1.1测试 - 在验证日期字段时失败。我正在使用dt-MM-yyyy格式的'pt-PT'文化和日期,正如我所说,在IE9中他们通过验证,但在其他浏览器上它表示该字段不是有效日期。 / p>

TIA

若阿金

1 个答案:

答案 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])));
}