Frage

Ich habe eine MVC 3 -Web -App auf MVC 4 verbessert, wobei ich den Anweisungen für das manuelle Upgrad nach dem manuellen Upgrad aufgerüstet habe. Alles lief in Ordnung und die App läuft in IE9. Ich habe Formulare mit Feldern mehrerer Datentypen mit Client -Seite und Server -Seitenvalidierung und alle werden korrekt verarbeitet, wenn das Formular eingereicht wird.

Aber wenn ich einen anderen Browser verwende - getestet mit Firefox 8, Chrome 15 und Safari 5.1.1 - ist es bei der Validierung von Datumfeldern fehl. Ich benutze die 'PT-PT'-Kultur mit Daten im Format DD-MM-yjyyy, und wie gesagt, in IE9 bestehen sie zur Validierung, aber auf den anderen Browsern ist das Feld kein gültiges Datum.

Tia

Joaquim

War es hilfreich?

Lösung

Ich stellte fest, dass das Problem in der JQuery -Validierung lag. Es ruft den JavaScript -Datumskonstruktor auf, um zu überprüfen, ob das Datum gültig ist:

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

Da JavaScript-Datumskonstruktor ein Datum in Form von YYYY-MM-DD erwartet, wurde er für Daten im portugiesischen Format DD-MM-YJY ungültig zurückgegeben.

Die Ausnahme ist dh, die nicht ungültig zurückgibt, sondern ein Datum von dem, den wir eingeführt haben.

Die Möglichkeit bestand darin, einen jQuery.Validate-pt.js mit dem Code zu erstellen, um die Validierung mit dem richtigen für unser Format zu überschreiben:

$.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])));
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top