Хотя вы можете сделать это с помощью конвертера, есть гораздо лучший вариант: использование эффекта шейдера. Вы найдете реализацию GreyscaleEffect на этой странице .
...
, потому что формат по умолчанию для даты - mm / dd / yyyy. ваша дата рассматривается как месяц, тогда она дает ошибку для того, что вам нужно добавить формат культуры.
CultureInfo culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
culture.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
и в вашем js-файле, в котором вы реализуете datepicker, включают код, например
jQuery.validator.methods["date"] = function (value, element) { return true; }
У меня такая же проблема теперь отлично работает для меня, я надеюсь, что она вам поможет.
Для меня просто есть этот код, чтобы переопределить стандартную проверку подлинности JQuery по умолчанию:
$(function () {
$.validator.methods.date = function (value, element) {
return this.optional(element) || moment(value, "L", true).isValid();
}
});
Существует ряд потенциальных проблем.
Сначала атрибуты [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
(например, <globalization culture="en-AU" uiCulture="en-AU"/>
), на сервере может быть выбрана ошибка проверки, и в этом случае вам нужно будет создать пользовательский ModelBinder
для DateTime
.
Боковое примечание: Я предполагаю, что @Html.ValidationMessageFor(m => m.DataTurno, ..)
является опечаткой (модель, которую вы показали, не включает свойство DataTurno
) и что ее действительно @Html.ValidationMessageFor(m => m.StartFieldDate, ..)
Похоже на неправильный формат даты дампикера jQuery, например, упоминание @ataravati.
Попробуйте инициализировать datepicker с помощью опции dateFormat
, например:
$(".datepicker").datepicker({ dateFormat: 'dd/mm/yyyy' });
Получить отладку или установите параметр dateFormat
после инициализации, например:
//this how to get what is it now
var dateFormat = $(".datepicker").datepicker("option", "dateFormat");
//set right format
$(".datepicker").datepicker("option", "dateFormat", "dd/mm/yyyy");