Wie erzwingt MVC Validate IValidatableObject

28

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?

    
Mr Bell 21.06.2011, 20:19
quelle

2 Antworten

32

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%     
gram 21.06.2011, 21:07
quelle
26

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%     
uglybugger 23.09.2011 03:39
quelle

Tags und Links