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

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

tia

华奎姆

有帮助吗?

解决方案

我发现问题是在jQuery验证中。它调用JavaScript日期构造函数以检查日期是否有效:

    // http://docs.jquery.com/Plugins/Validation/Methods/date
    date: function(value, element) {
        return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
    },

由于JavaScript日期构造函数期望以YYYY-MM-DD的形式进行日期,因此以葡萄牙格式DD-MM-yyy的日期返回了无效的日期。

例外是IE不会返回无效,而是与我们引入的日期不同。

解决方案是创建一个具有代码的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])));
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top