我在使用jQuery日期拾取器时遇到这个错误。
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
一样,当我使用日期选择器选择日期时,它被正确地添加到字段中。但同样在同一秒,出现了一个验证错误,说The field 'Date' must be a date
。
我用dd/MM/yy
格式手动编写日期进行了测试,然后看起来它正在工作。验证器在某个地方寻找那个格式,但我不知道在哪里修改它
你在用chrome吗?可以是一个Jquery .validate.js的问题,请看看这个Jquery Datepicker Chrome
DisplayFormat将不是验证中接受的格式。我建议使用正则表达式来验证这一点,如果你想要的东西有句号在那里。
[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));
};