【问题标题】:MVC 4: Date validation error in Firefox, Chrome, Safari - IE okMVC 4:Firefox、Chrome、Safari 中的日期验证错误 - IE ok
【发布时间】:2011-11-29 16:32:21
【问题描述】:

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

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

TIA

华金

【问题讨论】:

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


    【解决方案1】:

    我发现问题出在 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 for dates in portuguese format 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])));
    }
    

    【讨论】:

    猜你喜欢
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    相关资源
    最近更新 更多