39

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

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

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

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

4

5 回答 5

103

实际上你只需要为日期重载不显眼的 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;
    });
});
于 2012-12-29T12:06:38.393 回答
12

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

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

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

于 2013-07-31T01:59:03.840 回答
4

我知道它很旧,但使用它我在输入中添加了一个具有当前日期格式的属性(我使用 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 阅读了相同的属性。它可能没有那么有用,但它至少可以使格式与文化保持一致。虽然它可以帮助某人

于 2015-02-18T16:43:27.930 回答
3

与其他答案相比,我采取了不同的方法来解决这个问题。使用 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 的帖子,可以在此处阅读

希望这对其他人有帮助。

于 2015-02-26T23:01:36.647 回答
1

尝试在 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));
于 2017-06-06T09:32:16.383 回答