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器函数: