Validierung von Enum-Werten in C # MVC. Teilvalidierung erfolgt - Wie ändert man das Validierungsverhalten?

8

Ich habe ein Enum in meiner Rasiereransicht als ein verstecktes Feld dargestellt, das zu einem Aktionsergebnis zurückgeschrieben wird.

Ich habe festgestellt, dass der Binding-Wert, der im HTML-Code angegeben wird, automatisch den Wert für die Enumeration überprüft.

%Vor%

Rasiermesser:

%Vor%

Gerendertes HTML:

%Vor%

Wenn ich den Wert innerhalb des DOM auf etwas inkorrekt ändere und das Formular absende, gibt ModelState.IsValid false zurück und der folgende Fehler wird dem ModelState hinzugefügt:

%Vor%

Das ist alles Soße, aber ich dachte, wenn ich ein Ansichtsmodell erstellen würde, müsste ich explizit Validierungsregeln für mein Ansichtsmodell festlegen, wie das Attribut [Required] .

Es gibt auch ein Validierungsattribut namens EnumDataType .

%Vor%

Frage

Wenn die Validierung beim Binden automatisch erfolgt, was ist der Punkt im Attribut EnumDataType data validation?

    
Luke 17.10.2014, 12:40
quelle

1 Antwort

22

Ok, also habe ich die Antwort auf meine Frage gefunden.

Die angezeigte Fehlermeldung ist eher eine allgemeine Fehlermeldung, wenn die Bindung nicht möglich war. Wenn die Bindung versucht, eine nicht vorhandene Zeichenfolgendarstellung des Enum-Werts zu binden, der vom HTML-Code an die Enumeration gesendet wird, wird der Fehler:

erzeugt %Vor%

Die genau gleiche Fehlermeldung würde erscheinen, wenn ich versuchen würde, einen String-Wert an ein int innerhalb meiner View Model-Klasse zu binden.

Es scheint, dass das Problem darin besteht, dass eine Enumeration genauso wie die Zeichenfolgendarstellung ein beliebiger ganzzahliger Wert sein kann. Ich kann die enum auf eine beliebige Zahl setzen, auch wenn diese Nummer nicht in meiner enum existiert.

%Vor%

Daher ist dies gültig und wird ohne Fehler an meinen enum-Wert gebunden, auch wenn 1000 nicht in meiner enum existiert:

%Vor%

Hier kommt das Validierungsattribut EnumDataType ins Spiel. Wenn ich das Validierungsattribut zu meiner enum in meinem View-Modell hinzufüge:

%Vor%

Wenn das Attribut vorhanden ist, kann ich nur meine gültigen Enum-Werte zuweisen (0 oder 1 für dieses Beispiel).

Die falschen STRING-Darstellungen, die aus dem HTML-Code stammen, werden beim Binden automatisch für Sie validiert, aber eine Überprüfung auf einen ganzzahligen Wert wird nicht durchgeführt.

Ich hoffe, dass damit ENUMS innerhalb von ASP.NET MVC validiert wird.

    
Luke 17.10.2014, 13:13
quelle