MVC 4: ошибка проверки даты в Firefox, Chrome, Safari - IE ok - PullRequest
1 голос
/ 29 ноября 2011

Я обновил веб-приложение mvc 3 до mvc 4, следуя инструкциям по обновлению вручную. Все прошло хорошо, и приложение работает в IE9. У меня есть формы с полями нескольких типов данных с проверкой на стороне клиента и на стороне сервера, и все они обрабатываются правильно при отправке формы.

Но когда я использую другой браузер - протестирован с Firefox 8, Chrome 15 и Safari 5.1.1 - он не работает при проверке полей даты. Я использую культуру 'pt-PT' с датами в формате dd-MM-гггг, и, как я уже сказал, в IE9 они проходят проверку, но в других браузерах говорится, что поле не является допустимой датой.

ТИА

Жоаким

1 Ответ

8 голосов
/ 07 декабря 2011

Я обнаружил, что проблема была в проверке JQuery. Он вызывает конструктор даты javascript для проверки правильности даты:

    // http://docs.jquery.com/Plugins/Validation/Methods/date
    date: function(value, element) {
        return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
    },

Поскольку javascript Date конструктор ожидает дату в виде yyyy-MM-dd, он вернул недопустимые даты в португальском формате dd-MM-yyy.

Исключением является IE, который не возвращает Invalid, но дата отличается от введенной нами.

Было решено создать jquery.validate-pt.js с кодом для переопределения проверки правильностью для нашего формата:

$.validator.methods.date = function (value, element) {
    return this.optional(element) || ( /^\d{1,2}[\/-]\d{1,2}[\/-]\d{4}(\s\d{2}:\d{2}(:\d{2})?)?$/.test(value)
        && !/Invalid|NaN/.test(new Date(value.replace("/", "-").split("-")[2], value.replace("/", "-").split("-")[1], value.replace("/", "-").split("-")[0])));
}
...