Reprezentuję enum w moim widoku brzytwy jako ukryte pole, które jest odsyłane z powrotem do wyniku akcji.Sprawdzanie poprawności wartości wyliczeniowych w C# MVC. Występuje częściowa weryfikacja - Jak zmienić zachowanie sprawdzania poprawności?
Zauważyłem, że gdy wiąże wartość ciągu podanego w kodzie HTML, automatycznie sprawdza poprawność wartości wyliczenia.
/// <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)
wytopione HTML:
<input data-val="true" data-val-required="Quiz Type is not valid" id="QuizType" name="QuizType" type="hidden" value="Scored">
Gdybym zmienić wartość w DOM coś niewłaściwego i wysłać formularz, ModelState.IsValid
powraca false
i następujący błąd jest dodano do ModelState:
"The value 'myincorrectvalue' is not valid for QuizType."
To wszystko sos, ale pomyślałem, że jeśli stworzyłem model widoku, musiałem jawnie ustawić zasady sprawdzania poprawności w moim modelu widoku, takie jak atrybut [Required]
.
Istnieje również atrybut sprawdzania poprawności specjalnie dla tego o nazwie EnumDataType
.
[EnumDataType(typeof(QuizType))]
public QuizType QuizType { get; set; }
Pytanie
Jeśli walidacja odbywa się automatycznie podczas wiązania, jaki jest sens w atrybucie walidacji EnumDataType
danych?
Wartość 'wyliczenia 'jest zawsze wymagana (nie może mieć wartości NULL), dlatego dodano poprawność sprawdzania poprawności. Jeśli nie chcesz, aby było to wymagane, uczyń to nullable 'public QuizType? QuizType {get; zestaw; } ' –
Rzeczywiście, ale nie ustawiam go na' null', ustawiam go na wartość, która nie jest zawarta w Enum – Luke
Również, 'int' jest nie-nullable, ale gdybym miał go ustawić null byłby on po prostu związany jako 0 ... tak, aby nie wykonywał automatycznej weryfikacji. Gdzie jest udokumentowane, które typy nie są automatycznie sprawdzane? – Luke