ListBox为了不让我选择多个项目MVC

时间:2016-06-16 01:02:03

标签: c# html asp.net-mvc

当我运行代码时,我一次只能选择一个项目,这很奇怪,因为' ListBoxFor()'用于选择多个项目,所以我想要的是:

选择多个项目

查看(Index.cshtml):

<div>
    @Html.ListBoxFor(m => m.DropDownItems, new MultiSelectList(Repository.DDFetchItems(), "Value", "Text", Model.DropDownItems))
</div>

Model(ModelVariables.cs):

public class ModelVariables
{
    public List<SelectListItem> DropDownItems { get; set; } 
}

public static class Repository
{
    public static List<SelectListItem> DDFetchItems()
    {
        return new List<SelectListItem>()
        {
            new SelectListItem(){  Text = "Dogs", Value = "1", Selected = true},
            new SelectListItem(){  Text = "Cats", Value = "2"},
            new SelectListItem(){  Text = "Death", Value = "3"}
        };
    }
}

Controller(HomeController.cs):

[HttpGet]
public ActionResult Index()
{
    ModelVariables model = new ModelVariables()
    {
        DropDownItems = Repository.DDFetchItems()  
    };
    return View(model);
}

1 个答案:

答案 0 :(得分:3)

您无法将<select multiple>绑定到复杂对象的集合(List<SelectListItem>是什么)。 <select multiple>发回一系列简单值(在您的情况下,如果您选择第一个和第三个选项,则会提交[1, 3](所选选项的值)。

您的模型需要IEnumerable<int>属性才能绑定。

public class ModelVariables
{
    public IEnumerable<int> SelectedItems { get; set; }
    public IEnumerable<SelectListItem> DropDownItems { get; set; }
}

然后在GET方法中

public ActionResult Index()
{
    var ModelVariables= new ModelVariables()
    {
        DropDownItems = Repository.DDFetchItems(),
        SelectedItems = new List<int>(){ 1, 3 } // to preselect the 1st and 3rd options
    };
    return View(model);
}

并在视图中

@Html.ListBoxFor(m => m.SelectedItems, Model.DropDownItems)

旁注

  1. 删除Selected = true方法中的DDFetchItems() - 其中 由ListBoxFor()方法忽略,因为它的值 属性你的绑定决定了什么是
  2. 无需从中构建新的相同SelectList ListBoxFor()方法中的第一个(属性DropDownItems 已经IEumerable<SelectListItem>