【问题标题】:MVC DateTime validation - UK Date formatMVC DateTime 验证 - 英国日期格式
【发布时间】:2012-08-21 10:31:58
【问题描述】:

我有一个简单的视图,其中包含两个日期字段,并为不显眼的 JavaScript 验证添加了 ValidationMessageFor 控件。

我的问题是我一直被告知我的日期无效,但格式正确 (dd/MM/yyyy)

我已将 <globalization culture="en-GB" uiCulture="en-GB"/> 添加到我的 web.config,并且还在每个 DateTime 属性中添加了 [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)],但它仍然不接受英国格式的日期。

我在这里有什么明显的遗漏吗?

【问题讨论】:

  • 所以,通过这篇文章解决了 -> stackoverflow.com/questions/511439/… 但是为什么我需要创建自定义验证方法?当然,如果我在模型中指定格式,并指定我的文化,它应该使用该日期格式吗?
  • 您的服务器没有按照您需要的文化运行吗?
  • @SimonWhitehead 好像是这样,但是在我的开发机器上本地运行时也会发生这种情况
  • 我也遇到过类似的问题:stackoverflow.com/questions/9821407/mvc3-en-gb-dates-in-get 因为微软相信在美国以外没有人存在,这就是为什么 :)
  • 虽然“没有人在外面”的评论是真的,但我认为这有点误导,因为不是 MS,而是大多数美国开发人员认为在美国以外没有人存在, 与此同时,大多数英国开发者认为在英国以外没有人存在,依此类推……

标签: jquery asp.net-mvc-3 validation


【解决方案1】:

其实你只需要为日期重载不显眼的 JavaScript 验证方法

jQuery(function ($) {
    $.validator.addMethod('date',
    function (value, element) {
        if (this.optional(element)) {
            return true;
        }

        var ok = true;
        try {
            $.datepicker.parseDate('dd/mm/yy', value);
        }
        catch (err) {
            ok = false;
        }
        return ok;
    });
});

【讨论】:

  • additional-methods.js库中有一种国际日期验证方法可以替代使用。
  • 在我的例子中,我已经替换了 parseDate() 调用,因为我想使用日期和时间(而且似乎 datepicker 不支持这个),所以我使用了这个:` var re = /\d{4}-[01]\d-[0-3]\d [0-2]\d:[0-5]\d/;变量确定;试试 { ok = value.match(re) != null; } `
  • 澄清一下,@lutecki 的正则表达式验证 yyyy-mm-dd hh:mm
【解决方案2】:

Bohdan 的例子很有效!我已经 +1 你的回答伙伴。

为了完整起见,我写了一篇关于如何集成所有部分(模型、视图、自定义 EditorTemplate、jQuery 包括和添加 Bohdan 的解决方案)的博文。

您可以在这里阅读:http://www.kestrelblackmore.com/blog/jquery-datepicker-mvc4

【讨论】:

  • 把它放在博客上并一步一步解释整个过程真是太好了,谢谢。
【解决方案3】:

我知道它很旧,但使用它我向输入添加了一个具有当前日期格式的属性(我使用 CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern.ToLower() 从 ASP MVC 代码中获取)。

然后我重写了验证 javascript 以使用属性中找到的格式。

        var format = "mm/dd/yyyy";
        if (element.attributes["data-format"]) {
            format = element.attributes["data-format"].value;
        }

我还为 jquery ui datepicker 读取了相同的属性。它可能没有那么有用,但它至少可以使格式与文化保持一致。虽然它可以帮助某人

【讨论】:

    【解决方案4】:

    与其他答案相比,我采取了不同的方法来解决这个问题。使用 jQuery 添加一个新的日期函数,该函数将强制日期使用应用程序中设置的当前本地文化。

    $.validator.addMethod('date', function (value, element) {
                    var d = new Date();
                    return this.optional(element) || !/Invalid|NaN/.test(new Date(d.toLocaleDateString(value)));
                });
    

    如果 jQuery 验证失败。我将此答案归功于 Elton Stoneman 的帖子,可以阅读 here

    希望这对其他人有帮助。

    【讨论】:

    • 嗨,Aim,看起来是一个不错的简单解决方案。你在哪里插入这个?
    • @mattpm 您将把它插入到具有日期字段的视图的 JavaScript 代码中
    【解决方案5】:

    尝试在 jquery.validate.js 中直接更改。使用 $.datpicker

    date: function (value, element) {
        var s = value;
    
        var ind2 = 3;
        var ind3 = 6;
        var ind4 = 4;
    
        if (s.substr(6, 1) != "2") {
            ind2 = ind2 + 1;
            ind3 = ind3 + 1;
            ind4 = ind4 + 1;
        }
    
        var ndan = s.substr(0, 2);
        var nmje = s.substr(ind2, 2);
        var ngod = s.substr(ind3, ind4);
    
        var ns = ngod + "," + nmje + "," + ndan;
    
        return this.optional(element) || !/Invalid|NaN/.test(new Date(ns));
    

    【讨论】:

      猜你喜欢
      • 2013-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-18
      • 1970-01-01
      • 1970-01-01
      • 2018-05-19
      • 1970-01-01
      相关资源
      最近更新 更多