字段“日期”必须是日期MVC 4

我在使用我的jQuery datepicker时遇到此错误。

jQuery的:

$( ".datepicker" ).datepicker({ defaultDate: +7, autoSize: true, dateFormat: 'dd.mm.yy', }); 

模型:

 [DisplayName("Date")] [DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}", ApplyFormatInEditMode = true)] [Required(ErrorMessage = "Date is required")] public DateTime Date { get; set; } 

所以我希望日期格式类似于dd.MM.yyyy ,当我使用dd.MM.yyyy选择日期时,它会正确添加到字段中。 但同样在第二天,出现validation错误,说The field 'Date' must be a date

我做了测试,用dd/MM/yy格式手动编写日期,然后看起来它正在工作。 所以validation器在某处查找该格式,但我无法找到修改它的位置。

你在用铬吗? 可以是jquery.validate.js问题,请查看这个Jquery Datepicker Chrome

DisplayFormat将不是validation中接受的格式。 我建议使用正则表达式来validation这个,如果你想要有句号的东西。

 [DisplayName("Date")] [DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}", ApplyFormatInEditMode = true)] [Required(ErrorMessage = "Date is required")] [RegularExpression(@"PUT REGEX HERE", ErrorMessage = "Invalid Date")] // below is a link public DateTime Date { get; set; } 

一些常见的表达方式。

另外,我建议从c#到js时格式一致。

你有JS:

 dateFormat: 'dd.mm.yy' 

你可能想要:

 dateFormat: 'dd.mm.yyyy' 

您也可以将模型上的DisplayFormat属性更改为dd.MM.yy。 只是一个想法!

修改https://stackoverflow.com/a/17968454/4955259提供的答案似乎对我的日期格式dd.mm.yy起作用(在jquery.validate.js之后添加脚本)。

 jQuery.validator.methods.date = function (value, element) { var d = value.split("."); return this.optional(element) || !/Invalid|NaN/.test(new Date((/chrom(e|ium)/.test(navigator.userAgent.toLowerCase())) ? d[1] + "." + d[0] + "." + d[2] : value)); };