字段'Date'必须是日期 MVC 4



我在使用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));
};

最新更新