我有这段代码
Razor页面:
<div class="editor-label">
@Html.LabelFor(model => model.Citizenship)
</div>
<div class="editor-field">
@Html.EnumDropDownListFor(model => model.Citizenship)
@Html.ValidationMessageFor(model => model.Citizenship)
</div>
型号:
[DisplayName("Гражданство")]
[Required(ErrorMessageResourceType = typeof(Resources), ErrorMessageResourceName = "Required")]
public CitizenshipEnum? Citizenship { get; set; }
最后我得到了这个HTML:
<select data-val="true" data-val-required="Пожалуйста, укажите значение" id="Citizenship" name="Citizenship"><option value=""></option>
<option value="RF">Российская Федерация</option>
<option value="other">другое государство</option>
</select>
验证有什么问题? unobtrusive.js和其他必需的脚本肯定加载(其他输入验证正常工作)
我正在尝试添加自定义规则
来解决此问题 像这样,但它不起作用:$(function () {
$.validator.addMethod('selectNone', function (value, element) { debugger; return $(element).val(); }, "Please select an option");
$("form").validate({
rules: {
'#Citizenship': {
selectNone: true
}
}
});
};
答案 0 :(得分:4)
我现在有同样的问题。 如果没有从下拉列表中选择任何项,则枚举值为0,对于jquery验证器,它可能是正确值,因此它会通过验证。
因此,我为枚举类型添加了范围验证属性:
[Range(1, int.MaxValue)]
[EnumDataType(typeof(Priority))]
public Priority Priority { get; set; }
之后,jquery验证工作正常。
注意:通过添加[EnumDataType]属性,如果没有选择任何项目,ModelState在控制器中将无效,因此您可以在控制器中使用它进行验证。
答案 1 :(得分:0)
在控制器中:
[HttpPost]
[Authorize]
public ActionResult Edit ( ClassOfModel model )
{
if ( ModelState.IsValid )
{
if ( model.Citizenship == null )
{
ModelState.AddModelError( "Citizenship", "Пожалуйста, укажите значение" );
}
// Do something (e.g. save data)
}
return View( model );
}