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”一切都变得有效了。