MVC 4: Date erreur de validation dans Firefox, Chrome, Safari - ok IE
-
25-10-2019 - |
Question
Je mis à jour une application mvc 3 Web pour 4 Mvc, en suivant les instructions pour uppgrade manuel. Tout est bien passé, et l'application est en cours d'exécution dans IE9. J'ai des formes avec des champs de plusieurs types de données à la fois la validation côté côté client et serveur et tous sont traités correctement lorsque le formulaire est soumis.
Mais quand j'utiliser autre navigateur - testé avec Firefox 8, Chrome 15 et Safari 5.1.1 - Il échoue lors de la validation des champs de date. I''m en utilisant la « pt-PT » culture avec des dates sur le format dd-MM-AAAA, et comme je l'ai dit, en IE9 ils passent la validation, mais sur les autres navigateurs, il dit que le champ n'est pas une date valide.
TIA
Joaquim
La solution
Je trouve que le problème était dans la validation JQuery. Il appelle le javascript constructeur de date pour vérifier si la date est valide:
// http://docs.jquery.com/Plugins/Validation/Methods/date
date: function(value, element) {
return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
},
Depuis constructeur javascript Date attend une date sous la forme AAAA-MM-dd il est revenu non valide pour les dates au format portugais dd-MM-yyy.
L'exception est IE qui ne retourne pas non valide mais une date diferent de celle que nous avons introduit.
Le soluction était de créer un jquery.validate-pt.js avec le code pour passer outre la validation avec le bon pour notre format:
$.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])));
}