在ASP.NET MVC中,多选列表如何与模型绑定一起工作?

如果在ASP.NET MVC中有一个select列表设置为multiple,那么modelbinding是如何工作的?

它是什么返回您所选的项目,一个数组?

<SELECT NAME="toppings" MULTIPLE SIZE=5> <option value="mushrooms">mushrooms</option> <option value="greenpeppers">green peppers</option> <option value="onions">onions</option> <option value="tomatoes">tomatoes</option> <option value="olives">olives</option> </SELECT> 

是的,默认情况下,多选列表将通过所选值的数组发布。

本文还提供了更多信息,包括如何使用多选列表使用强types视图。

从链接的“文章”:

  • 您的模型或视图模型类需要所选选项的ID的集合属性,例如List<int> ToppingIds
  • 在包含多选列表POST的表单控制器操作方法中,可以通过添加到模型或视图模型类的集合属性来访问选定的选项。

是的,它返回一个数组。

查看模型:

 public class MyViewModel { public int[] SelectedIds { get; set; } public IEnumerable<SelectListItem> Items { get; set; } } 

控制器:

 public ActionResult Index() { var model = new MyViewModel { // fetch the items from some data source Items = Enumerable.Select(x => new SelectListItem { Value = x.Id, Text = "item " + x.Id }) }; return View(model); } 

视图:

 @model MyViewModel @Html.ListBoxFor(x => x.SelectedIds, Model.Items) 

在VegTableViewmodel中:

 public IEnumerable<MultiSelectList> Vegetables { get; set; } 

在控制器:获取蔬菜列表,然后将其传递给VegTableViewModel的Vegetables属性。

 viewmodel.Vegetables = vegetables .Select(d => new MultiSelectList(d.VegName)); 

在视图中:

 @Html.ListBoxFor(m => mL, new MultiSelectList(Model.Vegetables.Select(d => d.Items))