MVC 4:Firefox、Chrome、Safari 中的日期验证错误 - IE 正常

发布于 2024-12-18 14:54:32 字数 291 浏览 1 评论 0原文

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

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

蒂亚·

若奎姆

I upgraded a mvc 3 web app to mvc 4, following the instructions for manual uppgrade. Everything went OK, and the app is running in IE9. I have forms with fields of several data types with both client side and server side validation and all are processed correctly when the form is submitted.

But when i use other browser - tested with Firefox 8, Chrome 15 and Safari 5.1.1 - It fails when validating date fields. I´'m using the 'pt-PT' culture with dates on the format dd-MM-yyyy, and as I said, in IE9 they pass validation, but on the other browsers it says the field is not a valid date.

TIA

Joaquim

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

独留℉清风醉 2024-12-25 14:54:32

我发现问题出在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])));
}

I found that the problem was in JQuery validation. It calls the javascript Date constructor to check if the date is valid:

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

Since javascript Date constructor is expecting a date in the form yyyy-MM-dd it returned Invalid for dates in portuguese format dd-MM-yyy.

The exception is IE that does not return Invalid but a date diferent from the one we introduced.

The soluction was to create a jquery.validate-pt.js with the code to override the validation with the correct one for our format:

$.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])));
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文