Modelstate始终抛出无效的日期时间错误

我对Asp.net MVC4中的日期validation有疑问。 我正在使用数据注释进行日期validation,如下所示

[DataType(DataType.Date)] [AllowHtml] [DisplayFormat(HtmlEncode = false, ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")] [Display(Name = "Date Of Birth")] public Nullable DateOfBirth { get; set; } 

接下来,在Html页面中,我在MVC Html表单中使用以下内容

 @Html.TextBoxFor(model => model.UserSettings.DateOfBirth, String.Format("{0:dd/MM/yyyy}", model.UserSettings.DateOfBirth), new { id = "DoB", @class = "brth-ipt" }) 

最后,我正在使用Jquery Date选择器,如下所示

 $(function () { $("#DoB").datepicker("destroy"); $("#DoB").datepicker({ showOn: "both", beforeShow: customRange, dateFormat: "dd/mm/yy", //"mm-dd-yy", firstDay: 1, changeFirstDay: false, changeMonth: true, changeYear: true, yearRange: "-150:+0" }); }); 

我的问题是,当我从datepicker中选择一个日期时,它显示为mm / dd / yyyy格式,它工作正常。

但是当我再次加载页面来编辑表单时,它以mm-dd-yyyy格式显示。 现在,当我保存表单而不查看上一个日期(mm-dd-yyyy格式)时,我无法保存表单,因为数据注释vaidation会给我一个错误。 “日期不是有效格式”。

我无法解决这个问题。

试试这个:

  [DataType(DataType.Date)] [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:d}")] [Display(Name = "Date Of Birth:")] public DateTime? DateOfBirth { get; set; } 

据我所知,你甚至不需要使用Jquery Date picker 。 该框架附带内置帮助程序来选择日期。

在你的视图中

  
@Html.LabelFor(model => model.DateOfBirth )
@Html.EditorFor(model => model.DateOfBirth ) @Html.ValidationMessageFor(model => model.DateOfBirth )

这是在谷歌浏览器中测试的

Html.TextBoxFox()不考虑[DisplayFormat] 。 要利用此属性并实现您的目标,您可以使用

 Html.EditorFor(x => x.UserSettings.DateOfBirth, new {id = "DoB", @class = "brth-ipt"}) 

我碰到了同样的事情,终于找到了解决问题的方法。 我在ViewModel中制作了这个数据注释

 [DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")] 

这个代码在我的日期选择器

 

我把这段代码放在jquery中通过ajax发送

 $('#calender-container .input-group.date').datepicker({ todayBtn: true, calendarWeeks: true, todayHighlight: true, autoclose: true, }).datepicker('update', new Date()); 

当我从“mm-dd-yyyy”改变数据日期格式时很有趣,
这给了我无效的模型状态,对“MM-dd-yyyy”一切都变得有效了。