在DropDownList中验证所需的选择

时间:2011-01-12 18:08:30

标签: asp.net-mvc asp.net-mvc-2 validation

我的视图模型定义了必须显示为组合框的属性。属性定义是:

[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进行一些配置,但它没有默认值设置。

2 个答案:

答案 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() });