ASP.NET MVC 3 ListBox验证

时间:2011-11-22 16:34:19

标签: asp.net-mvc-3 validation listbox model-binding

我正在遇到一个奇怪的问题,即ASP.NET MVC 3 ListBox验证,正如标题中所述。基本上,我在我的viewmodel中有一个List,它绑定到一个启用了多个选择的ListBox。

列表被赋予一个属性[必需]。当我提交选择了单个值的表单时,它会通过验证而不会出现打嗝。但是,如果不止一个,验证将失败。

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

很奇怪,我无法重现您的问题。

型号:

public class MyViewModel
{
    [Required(ErrorMessage = "Please select at least one item")]
    public string[] SelectedItems { get; set; }

    public IEnumerable<SelectListItem> Items
    {
        get
        {
            return Enumerable.Range(1, 5).Select(x => new SelectListItem
            {
                Value = x.ToString(),
                Text = "item " + x
            });
        }
    }
}

控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View(new MyViewModel());
    }

    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        return View(model);
    }
}

查看:

@model MyViewModel

@using (Html.BeginForm())
{
    @Html.ListBoxFor(x => x.SelectedItems, Model.Items)
    @Html.ValidationMessageFor(x => x.SelectedItems)
    <button type="submit">OK</button>
}

如果未选择列表中的任何项目,则会按预期显示验证错误消息。如果选择一个或多个项目,验证将通过,并且不会显示任何错误消息。