当我运行代码时,我一次只能选择一个项目,这很奇怪,因为' 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);
}
答案 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)
旁注
Selected = true
方法中的DDFetchItems()
- 其中
由ListBoxFor()
方法忽略,因为它的值
属性你的绑定决定了什么是SelectList
ListBoxFor()
方法中的第一个(属性DropDownItems
已经IEumerable<SelectListItem>
)