1

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

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

TIA

华金

4

1 回答 1

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 的日期,因此它返回 Invalid 的日期为葡萄牙语格式 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])));
}
于 2011-12-07T14:19:53.730 回答