Asp.net MVC设置验证日期格式在Chrome上失败

时间:2012-10-11 18:04:10

标签: asp.net-mvc

我在asp.net mvc中设置验证日期格式Chrome时遇到问题,对于IE等其他浏览器,Firefox工作正常。

我在我的模型中定义了日期,如下一个代码:

[Required]
[Display(Name = "Data fi publicació")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime PublishingEndDate { get; set; }

在我看来:

@Html.TextBoxFor(model => model.PublishingEndDate)
@Html.ValidationMessageFor(model => model.PublishingEndDate)

问题似乎@Html.ValidationMessageFor使用格式MM/dd/yyyy验证日期,但我想要的是使用欧洲格式dd/MM/yyyy进行验证。如何将默认文化验证格式日期更改为dd/MM/yyyy

感谢您的帮助

5 个答案:

答案 0 :(得分:22)

最后我发现这个问题只影响Chrome,IE,Firexfox运行完美,看起来是一个Chrome bug,我在http://forums.asp.net/t/1729179.aspx/1找到了解决方案

必须使用以下代码覆盖jquery的验证器方法:

$(document).ready(function () {
    $('.calendarPicker').datepicker({ dateFormat: "dd/mm/yy" });

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

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

答案 1 :(得分:1)

确保您已在web.config中设置文化。这将使用所选文化的适当日期和数字格式。

http://msdn.microsoft.com/en-us/library/bz9tc508(v=vs.100).aspx

答案 2 :(得分:1)

这对我有所帮助:

$(function() {
            $(".datepicker").datepicker({
                todayBtn: true,
                language: "en-GB",
                format: "dd/mm/yyyy",
                clearBtn: true,
                pickTime: false
            });

            $.validator.addMethod("date",
                function(value, element) {
                    return this.optional(element) || parseDate(value, "dd-MM-yyyy") !== null;
                });
        });

答案 3 :(得分:0)

为避免客户端验证,您不希望任何与输入关联的data-val属性。所以我所做的就是写下纯HTML,而不是使用TextFor或EditorFor等...

<input type="text" class="datepicker form-control">

对我来说很好......

答案 4 :(得分:0)

如果您不想使用日期时间选择器:

由于 jquery.validate.unobtrusive.min.js 中的MVC错误(即使在MVC 5中),不以任何方式接受日期/日期时间格式,因此可能会发生客户端验证问题< / strong>即可。不幸的是你必须手动解决它。

我的最终解决方案:

您必须先包括:

@Scripts.Render("~/Scripts/jquery-3.1.1.js")
@Scripts.Render("~/Scripts/jquery.validate.min.js")
@Scripts.Render("~/Scripts/jquery.validate.unobtrusive.min.js")
@Scripts.Render("~/Scripts/moment.js")

您可以使用以下方式安装moment.js:

Install-Package Moment.js

然后你最终可以为日期格式解析器添加修复程序:

$(function () {
    $.validator.methods.date = function (value, element) {
        return this.optional(element) || moment(value, "DD.MM.YYYY", true).isValid();
    }
});