我的视图模型定义了必须显示为组合框的属性。属性定义是:
[Required]
public int Processor { get; set; }
我正在使用DropDownListFor
呈现组合框:
<%=Html.DropDownListFor(r => r.Processor, Model.Processors, Model.Processor)%>
Model.Processors
包含IEnumerable<SelectListItem>
,其中一个特殊项目定义为:
var noSelection = new SelectListItem
{
Text = String.Empty,
Value = "0"
};
现在我需要在我的组合框中添加验证,以便用户必须选择不同的值,然后选择'noSelection'。我希望对RequiredAttribute
进行一些配置,但它没有默认值设置。
答案 0 :(得分:26)
这个怎么样:
[Required]
public int? Processor { get; set; }
然后:
<%= Html.DropDownListFor(
x => x.Processor, Model.Processors, "-- select processor --"
) %>
在你的POST动作中
[HttpPost]
public ActionResult Index(MyViewModel model)
{
if (ModelState.IsValid)
{
// the model is valid => you can safely use model.Processor.Value here:
int processor = model.Processor.Value;
// TODO: do something with this value
}
...
}
现在您不再需要手动添加noSelection
项。只需使用正确的DropDownListFor重载。
答案 1 :(得分:0)
一个可能的问题是jQuery Validate会run any rules if the value of an element is empty。
当用户失去焦点时,您可以通过retriggering the validation解决此问题:
// select statements not firing null validation automatically
$("select").blur(function () { $(this).valid() });