Подтвердить что ты не робот

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, но он все равно не будет принимать даты в формате Великобритании.

Есть ли что-то очевидное, что я здесь отсутствует?

4b9b3361

Ответ 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));