MVC 4: Ошибка проверки даты в Firefox, Chrome, Safari - т.е.
-
25-10-2019 - |
Вопрос
Я обновил веб -приложение 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])));
}