8

我在 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

谢谢你的帮助

4

5 回答 5

22

最后我发现这个问题只影响 Chrome,用 IE,Firexfox 可以完美运行,似乎是一个 chrome 错误,我在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;
    });
});
于 2012-10-17T19:25:15.120 回答
1

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

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

于 2012-10-11T18:11:32.450 回答
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;
                });
        });
于 2015-04-03T08:35:01.183 回答
0

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

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

对我来说很好...

于 2015-08-05T14:01:23.877 回答
0

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

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

我最终的工作解决方案:

您必须在之前包括:

@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();
    }
});
于 2017-03-08T16:01:08.510 回答