use*_*286 4 asp.net-mvc asp.net-mvc-5
我非常困惑,因为这看起来应该很简单,但是我无法ListBox使用所选值填充我。我查看了其他几个答案,但无法弄清楚自己在做什么错。
这是我的模型:
public class ItemViewModel
{
public IEnumerable<Item> AllItems { get; set; }
public IEnumerable<Item> SelectedItems { get; set; }
}
public class Item
{
public string Id { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是我的控制器动作:
public ActionResult ListBoxTest()
{
var viewModel = new ItemViewModel()
{
AllItems = new List<Item>()
{
new Item()
{
Id = "1",
Name = "Name1"
},
new Item()
{
Id = "2",
Name = "Name2"
}
},
SelectedItems = new List<Item>()
{
new Item()
{
Id = "1",
Name = "Name1"
}
}
};
return this.View(viewModel);
}
Run Code Online (Sandbox Code Playgroud)
这是我视图中的行(使用默认的MVC视图模板):
@Html.ListBoxFor(m => m.SelectedItems, new MultiSelectList(Model.AllItems, "Id", "Name", Model.SelectedItems.Select(s => s.Id)), new { multiple = "multiple"})
Run Code Online (Sandbox Code Playgroud)
我也试过省略选定的值:
@Html.ListBoxFor(m => m.SelectedItems, new MultiSelectList(Model.AllItems, "Id", "Name"), new { multiple = "multiple"})
Run Code Online (Sandbox Code Playgroud)
并将选定的值作为列表:
@Html.ListBoxFor(m => m.SelectedItems, new MultiSelectList(Model.AllItems, "Id", "Name", Model.SelectedItems.Select(s => s.Id).ToList()), new { multiple = "multiple"})
Run Code Online (Sandbox Code Playgroud)
但是,无论我做什么,都不会选择列表项。我究竟做错了什么?
小智 5
您不能将<select>元素绑定到复杂对象的集合。多重选择仅回发简单值的数组-所选选项的值。
您的模型需要
public class ItemViewModel
{
public IEnumerable<Item> AllItems { get; set; }
public IEnumerable<int> SelectedItems { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
并在控制器中
SelectedItems = new List<int>(){ 1 }
Run Code Online (Sandbox Code Playgroud)
然后使用
@Html.ListBoxFor(m => m.SelectedItems, new SelectList(Model.AllItems, "Id", "Name")
Run Code Online (Sandbox Code Playgroud)
将在下拉列表中选择第一个选项。
请注意,该ListBoxFor()方法已设置,multiple="multiple"因此无需再次设置。另外,在SelectList()(或MultiSelectList())构造函数中设置last参数是没有意义的。它是您绑定到的属性的值,该属性确定选择的内容,并且该ListBoxFor()方法在内部忽略该参数。
我还建议您的财产应该是
public IEnumerable<SelectListItem> AllItems { get; set; }
Run Code Online (Sandbox Code Playgroud)
这样你就可以简单地使用
@Html.ListBoxFor(m => m.SelectedItems, Model.AllItems)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7496 次 |
| 最近记录: |