MVC DateTime validation - UK Формат даты
У меня есть простой вид с двумя полями даты с элементами ValidationMessageFor, добавленными для ненавязчивой проверки JavaScript.
Моя проблема в том, что я все время говорю, что моя дата недействительна, когда она находится в правильном формате (dd/MM/yyyy)
Я добавил <globalization culture="en-GB" uiCulture="en-GB"/>
в свой web.config, а также включил [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
в каждое свойство DateTime, но он все равно не будет принимать даты в формате Великобритании.
Есть ли что-то очевидное, что я здесь отсутствует?
Ответы
Ответ 1
На самом деле вам просто нужно перегрузить ненавязчивый метод проверки JavaScript на дату
jQuery(function ($) {
$.validator.addMethod('date',
function (value, element) {
if (this.optional(element)) {
return true;
}
var ok = true;
try {
$.datepicker.parseDate('dd/mm/yy', value);
}
catch (err) {
ok = false;
}
return ok;
});
});
Ответ 2
Пример Богдана обработает! У меня +1 ваш ответ.
Для полноты я написал сообщение в блоге о том, как интегрировать все части (Model, View, Custom EditorTemplate, jQuery включает и добавляет решение Bohdan).
Вы можете прочитать его здесь: http://www.kestrelblackmore.com/blog/jquery-datepicker-mvc4
Ответ 3
Я знаю это старый, но используя это, я добавил во вход атрибут с текущим форматом даты (который я извлек из кода ASP MVC с помощью CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern.ToLower()).
Затем я переписал javascript проверки, чтобы использовать формат, найденный в атрибуте.
var format = "mm/dd/yyyy";
if (element.attributes["data-format"]) {
format = element.attributes["data-format"].value;
}
Я также читаю тот же атрибут для jquery ui datepicker. Возможно, это не так полезно, но он может поддерживать формат, совместимый с культурой, по крайней мере. Хотя это может помочь кому-то
Ответ 4
Я использовал другой подход для решения этой проблемы по сравнению с другими ответами. Используйте jQuery для добавления новой функции даты, которая заставит дату использовать текущую локальную культуру в приложении.
$.validator.addMethod('date', function (value, element) {
var d = new Date();
return this.optional(element) || !/Invalid|NaN/.test(new Date(d.toLocaleDateString(value)));
});
То есть, если он не прошел проверку jQuery. Я беру этот ответ на сообщение Элтона Стонемана, который можно прочитать здесь
Надеюсь, это поможет кому-то другому.
Ответ 5
Попробуйте изменить это прямо в jquery.validate.js. Работа с $.datpicker
date: function (value, element) {
var s = value;
var ind2 = 3;
var ind3 = 6;
var ind4 = 4;
if (s.substr(6, 1) != "2") {
ind2 = ind2 + 1;
ind3 = ind3 + 1;
ind4 = ind4 + 1;
}
var ndan = s.substr(0, 2);
var nmje = s.substr(ind2, 2);
var ngod = s.substr(ind3, ind4);
var ns = ngod + "," + nmje + "," + ndan;
return this.optional(element) || !/Invalid|NaN/.test(new Date(ns));