在我的ASP MVC 5 Web应用程序中,我需要以特定格式显示日期.页面加载时,文本格式正确.但是,如果您编辑该值或只是尝试发布,则会显示验证错误:
该字段的定义如下:
@*Creation*@ <div class="form-group"> @Html.LabelFor(model => model.Creation,new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.TextBoxFor(model => model.Creation,"{0:dd/MM/yyyy}",new { @class = "form-control"}) @Html.ValidationMessageFor(m => m.Creation) </div> </div>
[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上执行相同的操作,则验证通过,但此方法在post方法上的绑定无效(默认日期值).
我该如何解决这个问题?
解决方法
这里的问题是,在幕后,验证实际上是由jQuery执行的.所以关键是要告诉jQuery验证器你将使用dd / MM / yyyy格式.
有几种方法可以做到这一点.最简单的方法是使用simpe tweak覆盖验证器函数(对于日期):
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.有一个全球化的图书馆,你可以使用here.
拥有库时,请包含以下文件:
globalize.js globalize.culture.en-AU.js
然后覆盖验证器函数:
<script type="text/javascript"> $(function () { $.validator.methods.date = function (value,element) { Globalize.culture("en-AU"); // the UK format return this.optional(element) || Globalize.parseDate(value) !== null; } }); </script>