我一直将我的剃刀视图中的枚举表示为隐藏字段,该字段被发布回操作结果。
我注意到,当它绑定 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
数据验证属性的意义何在?