ASP MVC 5日期格式validation问题

在我的ASP MVC 5 Web应用程序中,我需要以特定格式显示日期。 页面加载时,文本格式正确。 但是,如果您编辑该值或只是尝试发布,则会显示validation错误:

在此处输入图像描述

该字段的定义如下:

@*Creation*@ 
@Html.LabelFor(model => model.Creation, new { @class = "control-label col-md-2" })
@Html.TextBoxFor(model => model.Creation, "{0:dd/MM/yyyy}", new { @class = "form-control"}) @Html.ValidationMessageFor(m => m.Creation)

viewmodel属性定义为:

  [DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] [Display(Name = "Creation", ResourceType = typeof(Resources.Resources))] public DateTime Creation { get; set; } 

屏幕截图是使用Firefox浏览器创建的。 如果我在Edge上执行相同操作,则validation会通过,但此方法对post方法的绑定无效(默认日期值)。

我该如何解决这个问题?

这里的问题是,在幕后,validation实际上是由jQuery执行的。 所以关键是告诉jQueryvalidation器你将使用dd / MM / yyyy格式。

有几种方法可以做到这一点。 最简单的方法是使用simpe tweak覆盖validation器函数(对于日期):

 jQuery(function ($) { $.validator.addMethod('date', function (value, element) { $.culture = Globalize.culture("en-AU"); var date = Globalize.parseDate(value, "dd/MM/yyyy", "en-AU"); return this.optional(element) || !/Invalid|NaN/.test(new Date(date).toString()); }); }); 

另一种方法是使用jQuery的全球化库。 您可以在这里使用全球化图书馆。

拥有库时,请包含以下文件:

 globalize.js globalize.culture.en-AU.js 

然后覆盖validation器函数: