Существует ряд потенциальных проблем.
Сначала атрибуты [DataType(DataType.DateTime)]
и [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
применимы только при использовании @Html.EditorFor()
и используются для визуализации реализации браузера HTML5 datepicker (он добавляет атрибут type="date"
). Поскольку вы используете jQueryUI datepicker, тогда эти атрибуты не требуются. В любом случае, если вам нужен браузер HTML5 datepicker, формат должен быть DataFormatString = "{0:yyyy-MM-dd}"
(формат ISO) для правильной работы. Обратите внимание, что датпикер HTML5 поддерживается только в современных браузерах, а еще не совсем в FireFox ( ссылается на сравнение )
Если вы используете jQueryUI datepicker, тогда это может быть просто
@Html.TextBoxFor(m => m.StartFieldDate, new { @class = "form-control datepicker" })
и установить формат в сценарии datepicker
$('.datepicker').datepicker({ dateFormat: 'dd/mm/yy' });
Сообщение о проверке может быть связано с одной из двух проблем. На стороне клиента jquery-validate.js
проверяет дату с использованием формата MM/dd/yyyy
. Вы можете переопределить это, чтобы использовать dd/MM/yyyy
, включив jquery globalize или добавив следующий скрипт
$.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
(например,
), на сервере может быть выбрана ошибка проверки, и в этом случае вам нужно будет создать пользовательский ModelBinder
для DateTime
.
Боковое примечание: Я предполагаю, что @Html.ValidationMessageFor(m => m.DataTurno, ..)
является опечаткой (модель, которую вы показали, не включает свойство DataTurno
) и что ее действительно @Html.ValidationMessageFor(m => m.StartFieldDate, ..)