如何在 mvc 5 中使用 jquery 全球化和 jquery 验证不显眼

How to use jquery globalize with jquery validate unobtrusive in mvc 5

我使用 mvc 5 但 jquery 验证不显眼将日期验证为 MM/dd/yyyy 并且当我搜索如何使其验证时 dd/MM/yyyy

我发现 jquery globalize 可以实现这一点,但我没有找到当前版本 Globalize v1.1.2

的任何示例

我找到的所有示例都是针对低于 1.x

的版本

景色

<div class="form-group">
    @Html.LabelFor(model => model.Date, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.EditorFor(model => model.Date, "dd/MM/yyyy", new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.Date, "", new { @class = "text-danger" })
    </div>
</div>

元数据将日期指定为 dd/MM/yyyy

    [Required(ErrorMessage = " الحقل مطلوب ")]
    [DisplayName("تاريخ ")]
    [DisplayFormat(DataFormatString = "{dd/MM/yyyy}", ApplyFormatInEditMode = true)]
    public DateTime Date { get; set; }

尽管 jquery 验证不显眼将日期验证为 MM/dd/yyyy

我之前遇到过这个问题,你需要重载 jquery unobtrusive validation date 验证方法 (as answered here),让它知道输入的值是一个日期。通过这样做,您将不需要使用 jquery globalize.

代码

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;
    });

否则,如果您将应用程序设置为使用本地文化,则可以使用 this

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