MVC中的MultiSelectList数据绑定和模型验证

时间:2013-12-04 09:47:42

标签: c# razor data-binding multi-select asp.net-mvc-5

这是我在MultiSelectList中显示名单列表的代码

控制器

// GET
public ActionResult Create()
{
    var bookViewModel = new BookViewModel
    {
        AuthorList = _Authors.GetAuthors()
                          .Select(a => new SelectListItem { 
                                     Value = a.Id.ToString(), 
                                     Text = a.Name }
                                 ).ToList()
    };

    return View(bookViewModel);
}

// POST
[HttpPost]
public ActionResult Create(BookViewModel model)
{
    if (ModelState.IsValid)
    {
        //Some code
    }
    else
    {
        return View(model);
    }
}

查看

@using (Html.BeginForm())
{
    ...
    @Html.ListBoxFor(m => m.AuthorIds, Model.AuthorList, new { multiple = "multiple" })
    <input id="btnCreate" type="submit" value="Create" />
}

如果Model validetes,但是如果ModelState.IsValid = false,当它将模型返回到视图(.. else { return View(model); })时,此代码可以正常工作,模型不包含AuthorList并显示错误

  

没有类型为'IEnumerable'的ViewData项   有'AuthorIds'键。

在视图行@Html.ListBoxFor(m => m.AuthorIds, Model.AuthorList....

知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您需要在其他部分再次初始化作者列表

else
    {
model.AuthorList = _Authors.GetAuthors()
                          .Select(a => new SelectListItem { 
                                     Value = a.Id.ToString(), 
                                     Text = a.Name }
                                 ).ToList()
        return View(model);
    }