20

カミソリ ビュー内の列挙型を非表示フィールドとして表現してきました。これは、アクションの結果にポストされます。

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データ検証属性のポイントは何ですか?

4

1 に答える 1