MVC DateTime-Validierung – britisches Datumsformat

Lesezeit: 4 Minuten

Ich habe eine einfache Ansicht mit zwei Datumsfeldern mit ValidationMessageFor-Steuerelementen, die für die unauffällige JavaScript-Validierung hinzugefügt wurden.

Mein Problem ist, dass mir immer wieder gesagt wird, dass mein Datum ungültig ist, obwohl es das richtige Format hat (TT/MM/JJJJ).

Ich habe hinzugefügt <globalization culture="en-GB" uiCulture="en-GB"/> zu meiner web.config, und auch enthalten [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] für jede DateTime-Eigenschaft, akzeptiert jedoch immer noch keine Datumsangaben im UK-Format.

Gibt es irgendetwas offensichtliches, das ich hier vermisse?

  • Also, gelöst mit diesem Beitrag -> stackoverflow.com/questions/511439/… aber WARUM muss ich eine benutzerdefinierte Validierungsmethode erstellen? Sicherlich, wenn ich das Format im Modell angebe und meine Kultur angebe, sollte es dieses Datumsformat verwenden?

    – mp3duck

    21. August 2012 um 10:40 Uhr

  • Läuft Ihr Server nicht mit der von Ihnen benötigten Kultur?

    – Simon Weißkopf

    21. August 2012 um 10:44 Uhr

  • @SimonWhitehead Es scheint so, aber dies geschah auch, als es lokal auf meinem Entwicklungscomputer ausgeführt wurde

    – mp3duck

    21. August 2012 um 10:45 Uhr

  • Ich hatte ähnliche Probleme: stackoverflow.com/questions/9821407/mvc3-en-gb-dates-in-get Weil Microsoft glaubt, dass niemand außerhalb der USA existiert, deshalb 🙂

    – Liam

    21. August 2012 um 12:38 Uhr


  • Obwohl der Kommentar “außerhalb der USA existiert niemand” wahr ist, ist er meiner Meinung nach etwas irreführend, da nicht MS, sondern die Mehrheit der US-Entwickler glaubt, dass außerhalb der USA niemand existiert. und Gleichzeitig glaubt die Mehrheit der britischen Entwickler, dass niemand außerhalb Großbritanniens existiert, und so weiter …

    – g.pickardou

    11. Mai 15 um 15:36 Uhr


Eigentlich müssen Sie nur die unaufdringliche JavaScript-Validierungsmethode für das Datum überladen

jQuery(function ($) {
    $.validator.addMethod('date',
    function (value, element) {
        if (this.optional(element)) {
            return true;
        }

        var ok = true;
        try {
            $.datepicker.parseDate('dd/mm/yy', value);
        }
        catch (err) {
            ok = false;
        }
        return ok;
    });
});

  • Es gibt eine internationale Datumsvalidierungsmethode, die stattdessen in der verwendet werden kann zusätzliche-methoden.js Bücherei.

    – Eberesche

    18. Juni 13 um 9:05 Uhr

  • In meinem Fall habe ich den parseDate()-Aufruf ersetzt, weil ich Datum und Uhrzeit verwenden wollte (und es scheint, dass die Datumsauswahl dies nicht unterstützt), also habe ich Folgendes verwendet: ` var re = /d{4} -[01]D-[0-3]D [0-2]D:[0-5]D/; var ok; try { ok = value.match(re) != null; } `

    – lutecki

    27. Oktober 15 um 17:30 Uhr


  • Nur zur Verdeutlichung: Der Regex-Ausdruck von @lutecki validiert yyyy-mm-dd hh:mm

    – blauer Punkt

    15. Januar 18 um 15:47 Uhr

Bohdans Beispiel hat wunderbar funktioniert! Ich habe deiner Antwort +1 gegeben, Kumpel.

Der Vollständigkeit halber habe ich einen Blog-Beitrag darüber geschrieben, wie man alle Teile integriert (Model, View, benutzerdefiniertes EditorTemplate, jQuery-Includes und Hinzufügen von Bohdans Lösung).

Sie können es hier lesen: http://www.kestrelblackmore.com/blog/jquery-datepicker-mvc4

  • Es ist eine großartige Sache, dass Sie es in einen Blog gestellt und den gesamten Vorgang Schritt für Schritt erklärt haben, danke.

    – Ivan Golović

    29. April 14 um 14:57 Uhr

Ich weiß, dass es alt ist, aber damit habe ich der Eingabe ein Attribut mit dem aktuellen Datumsformat hinzugefügt (das ich aus dem ASP-MVC-Code mit CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern.ToLower() abgerufen habe).

Dann habe ich das Validierungs-Javascript neu geschrieben, um das im Attribut gefundene Format zu verwenden.

        var format = "mm/dd/yyyy";
        if (element.attributes["data-format"]) {
            format = element.attributes["data-format"].value;
        }

Ich habe auch das gleiche Attribut für den jquery ui datepicker gelesen. Es ist vielleicht nicht so nützlich, aber es kann zumindest das Format mit der Kultur konsistent halten. Obwohl es jemandem helfen könnte

MVC DateTime Validierung – britisches Datumsformat
Ich bin

Ich habe im Vergleich zu anderen Antworten einen anderen Ansatz gewählt, um dies zu lösen. Verwenden Sie jQuery, um eine neue Datumsfunktion hinzuzufügen, die das Datum dazu zwingt, die aktuelle lokale Kultur zu verwenden, die in der Anwendung festgelegt ist.

$.validator.addMethod('date', function (value, element) {
                var d = new Date();
                return this.optional(element) || !/Invalid|NaN/.test(new Date(d.toLocaleDateString(value)));
            });

Das ist, wenn es bei der jQuery-Validierung fehlschlägt. Ich schreibe diese Antwort dem Beitrag von Elton Stoneman zu, der gelesen werden kann Hier

Hoffe, das wird jemand anderem helfen.

1643907667 828 MVC DateTime Validierung – britisches Datumsformat
Zvonimir

Versuchen Sie, dies direkt in jquery.validate.js zu ändern. Arbeiten Sie mit $.datpicker

date: function (value, element) {
    var s = value;

    var ind2 = 3;
    var ind3 = 6;
    var ind4 = 4;

    if (s.substr(6, 1) != "2") {
        ind2 = ind2 + 1;
        ind3 = ind3 + 1;
        ind4 = ind4 + 1;
    }

    var ndan = s.substr(0, 2);
    var nmje = s.substr(ind2, 2);
    var ngod = s.substr(ind3, ind4);

    var ns = ngod + "," + nmje + "," + ndan;

    return this.optional(element) || !/Invalid|NaN/.test(new Date(ns));

.

757820cookie-checkMVC DateTime-Validierung – britisches Datumsformat

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy