多选列表如何与ASP.NET MVC中的模型绑定一起使用?

51 html asp.net-mvc model-binding

如果在ASP.NET MVC中将选择列表设置为多个,那么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>
Run Code Online (Sandbox Code Playgroud)

Sam*_*sel 26

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

本文提供了更多信息,包括如何将强类型视图与多选列表一起使用.

从链接的"文章":

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


Hba*_*bas 24

是的,它返回一个数组.

查看型号:

public class MyViewModel
{
    public int[] SelectedIds { get; set; }
    public IEnumerable<SelectListItem> Items { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

控制器:

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);
}
Run Code Online (Sandbox Code Playgroud)

视图:

@model MyViewModel
@Html.ListBoxFor(x => x.SelectedIds, Model.Items)
Run Code Online (Sandbox Code Playgroud)


Sre*_*kat 7

在VegTableViewmodel中:

public IEnumerable<MultiSelectList> Vegetables { get; set; }
Run Code Online (Sandbox Code Playgroud)

在Controller中:获取蔬菜列表,然后将其传递给VegTableViewModel的Vegetables属性.

viewmodel.Vegetables = vegetables .Select(d => new MultiSelectList(d.VegName));
Run Code Online (Sandbox Code Playgroud)

在视图中:

@Html.ListBoxFor(m => m.L, new MultiSelectList(Model.Vegetables.Select(d => d.Items))
Run Code Online (Sandbox Code Playgroud)