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

52
如果你在ASP.NET MVC中设置了一个多选的选择列表,那么模型绑定是如何工作的?对于所选项,它返回什么,一个数组吗?
<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>
3个回答

29

是的,默认情况下,多选列表将通过选定值的数组进行提交。

这篇文章提供了更多信息,包括如何在使用多选列表时使用强类型视图。

从链接的“文章”中可以看到:

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

26

是的,它返回一个数组。

视图模型:

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)

8
在VegTableViewmodel中:
public IEnumerable<MultiSelectList> Vegetables { get; set; }

在控制器中: 获取蔬菜列表,然后将其传递给VegTableViewModel的Vegetables属性。
viewmodel.Vegetables = vegetables .Select(d => new MultiSelectList(d.VegName));

在视图中:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接