Es scheint, dass wenn MVC ein Modell überprüft, dass es zuerst die DataAnnotation-Attribute (wie erforderlich oder Bereich) durchläuft, und wenn einer dieser Fehler fehlschlägt, wird die Validate-Methode für mein IValidatableObject-Modell ausgeführt.
Gibt es eine Möglichkeit, dass MVC diese Methode auch dann ausführt, wenn die andere Validierung fehlschlägt?
Sie können Validate () manuell aufrufen, indem Sie eine neue Instanz von ValidationContext wie folgt übergeben:
%Vor%Ein Nachteil dieses Ansatzes besteht darin, dass in Fällen, in denen keine Fehler auf Property-Ebene (DataAnnotation) vorliegen, die Validierung zweimal ausgeführt wird. Um dies zu vermeiden, können Sie Ihrem Modell eine Eigenschaft hinzufügen, z. B. einen booleschen Validated-Wert, den Sie in Ihrer Validate () -Methode auf true festlegen und dann überprüfen, bevor Sie die Methode manuell in Ihrem Controller aufrufen.
Also in Ihrem Controller:
%Vor%Und in Ihrem Modell:
%Vor%Es gibt eine Möglichkeit, dies zu tun, ohne den Code für den oberen Teil der Controller-Aktion zu benötigen.
Sie müssen den Standardmodellbinder durch einen eigenen ersetzen:
%Vor%Ihr Modellbinderanbieter sieht folgendermaßen aus:
%Vor%Erstellen Sie jetzt einen benutzerdefinierten Modellbinder, der die Überprüfung tatsächlich erzwingt. Hier ist das schwere Heben erledigt:
%Vor%Sie benötigen auch eine IndexOf-Erweiterungsmethode. Dies ist eine billige Implementierung, aber es funktioniert:
%Vor%Tags und Links asp.net-mvc-3 validation