Ich habe ein Enum in meiner Rasiereransicht als ein verstecktes Feld dargestellt, das zu einem Aktionsergebnis zurückgeschrieben wird.Validierung von Enum-Werten innerhalb von C# MVC. Teilvalidierung erfolgt - Wie ändert man das Validierungsverhalten?
Ich habe festgestellt, dass, wenn es den String-Wert innerhalb der HTML gebunden ist, überprüft es automatisch den Wert für die Enumeration.
/// <summary>
/// Quiz Types Enum
/// </summary>
public enum QuizType
{
/// <summary>
/// Scored Quiz
/// </summary>
Scored = 0,
/// <summary>
/// Personality Type Quiz
/// </summary>
Personality = 1
}
Razor:
@Html.HiddenFor(x => x.QuizType)
Rendered HTML:
<input data-val="true" data-val-required="Quiz Type is not valid" id="QuizType" name="QuizType" type="hidden" value="Scored">
Wenn ich den Wert innerhalb des DOM, um etwas falsch und senden Sie das Formular ändern, ModelState.IsValid
kehrt false
und der folgende Fehler ist hinzugefügt zum ModelState:
"The value 'myincorrectvalue' is not valid for QuizType."
Das ist alles Soße, aber ich dachte, dass, wenn ich ein Ansichtsmodell erstellte, dass ich Validierungsregeln explizit auf meinem Ansichtsmodell festlegen musste, z. B. das [Required]
Attribut.
Auch gibt es ein Validierungsattribut speziell dafür EnumDataType
genannt.
[EnumDataType(typeof(QuizType))]
public QuizType QuizType { get; set; }
Frage
Wenn die Validierung automatisch geschieht, wenn die Bindung, was der Punkt, in dem Attribut EnumDataType
Datenvalidierung ist?
Ein 'enum'-Wert ist immer erforderlich (er kann nicht null sein), weshalb die Validierung hinzugefügt wird. Wenn Sie nicht möchten, dass es erforderlich ist, machen Sie es NULL-'öffentlichen QuizType? QuizType {erhalten; einstellen; } ' –
In der Tat, aber ich setze es nicht auf 'null', ich setze es auf einen Wert, der nicht in der Enum enthalten ist – Luke
Auch 'int' ist nicht NULL-fähig, aber wenn ich es einstellen sollte null würde nur als 0 gebunden sein ..., so dass keine automatische Validierung durchgeführt wird. Wo wird dokumentiert, welche Typen nicht automatisch validiert werden? – Luke