Ho rappresentato un enum all'interno della mia vista del rasoio come un campo nascosto, che viene posticipato a un risultato di azione.Validazione dei valori di enum in C# MVC. Convalida parziale - Come modificare il comportamento di convalida?
Ho notato che quando si lega il valore della stringa fornito all'interno del codice HTML, che convalida automaticamente il valore per l'enumerazione.
/// <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)
rendering HTML:
<input data-val="true" data-val-required="Quiz Type is not valid" id="QuizType" name="QuizType" type="hidden" value="Scored">
Se cambio il valore all'interno del DOM per qualcosa di sbagliato e inviare il modulo, ModelState.IsValid
rendimenti false
e il seguente errore viene aggiunto alla ModelState:
"The value 'myincorrectvalue' is not valid for QuizType."
Questo è tutto sugo, ma ho pensato che se ho creato un modello di vista, che ho dovuto impostare in modo esplicito le regole di convalida sul mio modello di vista, ad esempio l'attributo [Required]
.
Inoltre v'è un attributo di convalida appositamente per questo chiamato EnumDataType
.
[EnumDataType(typeof(QuizType))]
public QuizType QuizType { get; set; }
Domanda
Se la convalida avviene automaticamente quando vincolante, qual è il punto in l'attributo di convalida dei dati EnumDataType
?
Un valore 'enum' è sempre richiesto (non può essere null) in modo che venga aggiunta la convalida. Se non vuoi che sia richiesto, rendilo nullable 'public QuizType? QuizType {get; impostato; } ' –
Infatti, ma non lo sto impostando su' null', lo sto impostando su un valore che non è contenuto nell'Enum – Luke
Inoltre, 'int' non è annullabile, ma se dovessi impostarlo null sarebbe semplicemente associato a 0 ... in modo che non esegua la convalida automatica. Dove è documentato quale tipo di do/do-do non viene auto validato? – Luke