Вопрос

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

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

Тиа

Хоаким

Это было полезно?

Решение

Я обнаружил, что проблема была в проверке 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 ожидает даты в форме yyyy-mm-dd, он вернулся недействительным для дат в португальском формате dd-mm-yyy.

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

Решение должно было создать jquery.validate-t.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])));
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top