【问题标题】:jQuery date validation MVC 4 .Net 4.5.1 UK date "must be a date" ErrorjQuery 日期验证 MVC 4 .Net 4.5.1 英国日期“必须是日期”错误
【发布时间】:2013-10-31 09:41:36
【问题描述】:

我有一个最近升级到 .Net 4.5.1 和 MVC 4 的应用程序。我正在使用 jQuery datepicker 和 jQuery.validation 1.11.1。

我在英国,因此日期将采用 en-GB 语言环境(“dd/mm/yyyy”)。我尝试了hereherehere 的建议,但无济于事。

我的 web.config 中也有:

<globalization uiCulture="en-GB" culture="en-GB" />

并已将 IIS 中的全球化设置为 en-GB,但输入的每个日期都被验证为美国格式日期。

有人可以帮忙吗?

【问题讨论】:

  • 前段时间我遇到了同样的问题,找不到合适的解决方案,作为一种解决方法,我禁用了 MVC 的客户端验证,为required 编写了我自己的自定义验证并将输入日期字段设置为readonly,因此用户无法修改使用datepicker提供的日期
  • 当你应用上面的解决方案时会出现这个问题:stackoverflow.com/questions/26279779/…

标签: .net asp.net-mvc-4 date jquery-validate globalization


【解决方案1】:

刚刚解决了这个问题,我覆盖了规则并使用了数据属性

if (typeof jQuery.validator.methods.date !== 'function') {
    var f = function (value, element) {
        var e = $(element).attr('data-dateformat');
        if (e && (e.length)) {
            var dt = jQuery.datepicker.parseDate(e, value);
            return this.optional(element) || !/Invalid|NaN/.test(dt.toString());
        } else {
            return this.optional(element) || !/Invalid|NaN/.test(new Date(value).toString());
        }
    }
    jQuery.validator.addMethod("date", f);
} else {
    var m = jQuery.validator.methods.date;
    var f = function(value, element) {
        var e = $(element).attr('data-dateformat');
        if (e && (e.length)) {
            var dt = jQuery.datepicker.parseDate(e, value);
            return this.optional(element) || !/Invalid|NaN/.test(dt.toString());
        } else {
            return m(value, element);
        }
    }
    jQuery.validator.addMethod("date", f);
}

假设您有日期选择器,但如果您使用日期和 jQuery,我认为这是一个安全的选择。 如果元素具有在 data-dateformat 中定义的日期格式,它将使用该格式对其进行解析,否则将回退到默认日期规则,如果不存在,则执行默认规则。

我将它放在我的站点全局代码文件中,以使其保持在 jQuery 脚本之外

【讨论】:

    【解决方案2】:

    在调用的 Jquery 中只需添加格式。

    $(函数() { $("#datepicker").datepicker({dateFormat: 'dd/mm/yy'}); });

    http://www.matthewcarlin.co.uk/jquery-quick-tip-2-changing-date-format

    【讨论】:

    • 不回答问题。他们要求验证从日期选择器生成的日期。
    【解决方案3】:

    将 jQuery.validate.js 中的日期验证方法更改为以下解决了该问题:

    date: function (value, element) {
            $.culture = Globalize.culture("en-GB");
            var date = Globalize.parseDate(value, "dd/MM/yyyy", "en-GB");
            return this.optional(element) || 
                           !/Invalid|NaN/.test(new Date(date).toString());
        }
    

    在 Chrome、FF 和 IE 中测试

    【讨论】:

    • 在您的解决方案的 jQuery.validate.js 文件中
    • 我需要添加Globalize.js,因为我用这个替换了旧的date: function ...,但它没有用总是我得到The filed ... must be Date
    • 是的,我也面临同样的问题,尽管我已经按照所说的做了......有什么建议吗?
    • 我在实现这个之后也得到错误,它正在寻找 Globalize.js,不知道那是什么或把它放在哪里
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多