カミソリ ビュー内の列挙型を非表示フィールドとして表現してきました。これは、アクションの結果にポストされます。
HTML 内で提供された文字列値をバインドすると、列挙型の値が自動的に検証されることに気付きました。
/// <summary>
/// Quiz Types Enum
/// </summary>
public enum QuizType
{
/// <summary>
/// Scored Quiz
/// </summary>
Scored = 0,
/// <summary>
/// Personality Type Quiz
/// </summary>
Personality = 1
}
かみそり:
@Html.HiddenFor(x => x.QuizType)
レンダリングされた HTML:
<input data-val="true" data-val-required="Quiz Type is not valid" id="QuizType" name="QuizType" type="hidden" value="Scored">
DOM 内の値を間違った値に変更してフォームを送信すると、ModelState.IsValid
返さfalse
れ、次のエラーが ModelState に追加されます。
"The value 'myincorrectvalue' is not valid for QuizType."
[Required]
それはすべてグレービーですが、ビューモデルを作成した場合、ビューモデルに属性などの検証ルールを明示的に設定する必要があると思いました。
また、これ専用の と呼ばれる検証属性もありますEnumDataType
。
[EnumDataType(typeof(QuizType))]
public QuizType QuizType { get; set; }
質問
バインディング時に検証が自動的に行われる場合、EnumDataType
データ検証属性のポイントは何ですか?