有许多潜在的问题。
首先是[DataType(DataType.DateTime)]
and [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
属性仅在使用时适用@Html.EditorFor()
并用于呈现 HTML5 日期选择器的浏览器实现(它添加了type="date"
属性)。由于您使用的是 jQueryUI 日期选择器,因此不需要这些属性。无论如何,如果您确实想要浏览器 HTML5 日期选择器,那么格式需要是DataFormatString = "{0:yyyy-MM-dd}"
(ISO 格式)才能正常工作。另请注意,HTML5 日期选择器仅在现代浏览器中受支持,FireFox 中尚不支持(参考比较)
如果您使用 jQueryUI datepicker 那么它可以是
@Html.TextBoxFor(m => m.StartFieldDate, new { @class = "form-control datepicker" })
并在日期选择器脚本中设置格式
$('.datepicker').datepicker({ dateFormat: 'dd/mm/yy' });
验证消息可能来自两个问题之一。在客户端,jquery-validate.js
使用验证日期MM/dd/yyyy
格式。您可以覆盖它来使用dd/MM/yyyy
通过包括jquery 全球化或添加以下脚本
$.validator.addMethod('date', function (value, element) {
if (this.optional(element)) {
return true;
}
var valid = true;
try {
$.datepicker.parseDate('dd/mm/yy', value);
}
catch (err) {
valid = false;
}
return valid;
});
$('.datepicker').datepicker({ dateFormat: 'dd/mm/yy' });
另一个潜在的问题是服务器端验证。如果服务器区域性不接受以下格式的日期dd/MM/yyyy
(e.g. <globalization culture="en-AU" uiCulture="en-AU"/>
)那么服务器上可能会抛出验证错误,在这种情况下,您需要创建一个自定义ModelBinder
for DateTime
.
旁注:我假设@Html.ValidationMessageFor(m => m.DataTurno, ..)
是一个拼写错误(您显示的模型不包含属性DataTurno
)而且它真的@Html.ValidationMessageFor(m => m.StartFieldDate, ..)