MVC DateTime验证 - 英国日期格式

时间:2012-08-21 10:31:59

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

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

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

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

这里有什么明显的遗失吗?

5 个答案:

答案 0 :(得分:100)

实际上,您只需要为日期

重载不显眼的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;
    });
});

答案 1 :(得分:12)

Bohdan的例子很有用!我给你的答案队友+1了。

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

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

答案 2 :(得分: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的相同属性。它可能没那么有用,但它至少可以保持格式与文化一致。虽然它可以帮助某人

答案 3 :(得分: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验证上失败了。我将这个答案归功于埃尔顿斯通曼的帖子,可以阅读here

希望这会帮助别人。

答案 4 :(得分: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));