Gibt es einen Out-of-the-Box-Validator für Enum-Werte im DataAnnotations-Namespace?

8

C # enum-Werte sind nicht auf die in der Definition aufgelisteten Werte beschränkt und können einen beliebigen Wert des Basistyps speichern. Wenn der Basistyp nicht definiert ist als Int32 oder einfach int verwendet wird.

Ich entwickle einen WCF-Service, der sicher sein muss, dass einem Enum ein Wert zugewiesen ist, der dem Standardwert für alle Enums von 0 entspricht. Ich beginne mit einem Unit-Test, um herauszufinden, ob [Required] den richtigen Job machen würde hier.

%Vor%

Tut es nicht, der zweite Test wirft keine Ausnahme.

Meine Frage ist: Gibt es ein Validator-Attribut, um zu überprüfen, ob der angegebene Wert in Enum.GetValues ?

ist?

Aktualisieren Stellen Sie sicher, dass ValidateObject(Object, ValidationContext, Boolean) mit dem letzten Parameter gleich True anstelle von ValidateObject(Object, ValidationContext) verwendet wird, wie in meinem Komponententest.

    
Mike 17.01.2013, 14:44
quelle

2 Antworten

14

Es gibt EnumDataType in .NET4 + ...

Stellen Sie sicher, dass Sie den dritten Parameter validateAllProperties=true im Aufruf von ValidateObject

gesetzt haben

Also aus Ihrem Beispiel:

%Vor%     
qujck 17.01.2013, 15:03
quelle
10

Sie suchen nach:

%Vor%

[Update + 1]

Der Out-of-the-Box-Validator, der eine Vielzahl von Validierungen einschließlich dieser durchführt, heißt EnumDataType. Stellen Sie sicher, dass Sie validateAllProperties = true als ValidateObject festlegen, andernfalls wird Ihr Test fehlschlagen.

Wenn Sie nur überprüfen möchten, ob die Aufzählung definiert ist, können Sie einen benutzerdefinierten Validator mit der obigen Zeile verwenden:

%Vor%

... aber ich nehme an, dass es nicht out of the box ist, oder?

    
atlaste 17.01.2013 14:47
quelle

Tags und Links