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

Était-ce utile?

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])));
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top