我一直在努力将MultiSelectList从Html助手绑定到特定模型。
模型
在我的模型中,我有类似的东西:
public class DefaultSelection
{
public SelectionItem Selection1 {get;set;}
public SelectionItem Selection2 {get;set;}
public SelectionItem Selection3 {get;set;}
public IEnumerable<SelectionItem> Items{get;set;}
public DefaultSelection()
{
Selection1 = new SelectionItem(true, "Item1");
Selection2 = new SelectionItem(false, "Item2");
Selection3 = new SelectionItem(true, "Item3");
Items = new List<SelectionItem>(new SelectionItem[]
{Selection1,Selection2,Selection3});
}
}
public class SelectionItem
{
public bool Selected {get;set;}
public string Name {get;set;}
public SelectionItem(bool selected, string name)
{
Selected = selected;
Name = name;
}
}
我想要做的是将我的ListBox选项绑定到 SelectionItem 的 Selected 属性。
我在我的观点中试过这个:
@Html.ListBoxFor(model => model.Items, new MultiSelectList( Model.Items, Model.Items.Where(item => item.Selected)), new { @class = "selectpicker" })
不幸的是,所选项目都没有正确显示(没有选择任何内容),也没有选择对模型产生任何影响......
有没有办法解决这个问题? 我可以摆脱这个 Items 属性,因为它只是对所需属性的引用吗?
答案 0 :(得分:0)
我认为这比你想象的容易得多。我们试一试。
创建一个好的视图模型:
public class DefaultSelection
{
public IEnumerable<SelectListItem> Items { get; set; }
//Set a property to hold the selected items IDs.
public IEnumerable<string> SelectedItems { get; set; }
public DefaultSelection()
{
//preselected features
Items = new List<SelectListItem>
{
new SelectListItem { Text = "Item1", Selected = true},
new SelectListItem { Text = "Item2", Selected = false},
new SelectListItem { Text = "Item3", Selected = true}
};
}
}
在视图中渲染ListBox:
<div class="form-group">
@Html.LabelFor(x => x.Items)
@Html.ListBoxFor(x => x.SelectedItems, Model.Items, new { @class = "selectpicker" })
</div>
请注意,我在这里使用的是内置的System.Web.Mvc.SelectListItem
类,而不是您自定义的SelectionItem
类 - 您可以安全地摆脱它。
现在,您将在发布后获得所选项目ID(在本例中为名称,因为您在创建项目时未指定value属性)。
希望这有帮助!
答案 1 :(得分:0)
您的@Html.ListBoxFor
应该是这样的
@Html.ListBoxFor(model => model.SelectedNames, new MultiSelectList(Model.Items,"Name", "Name",Model.Items.Where(x=>x.Selected).Select(x=>x.Name)), new { @class = "selectpicker" })
您必须指定Value field
Text field
和Model.Items
"Name", "Name"
Model.Items.Where(x=>x.Selected).Select(x=>x.Name)
,true
将选择所选的所有值public List<string> SelectedNames { get; set; }
但是你的模型将返回字符串列表中的值,因此你应该定义一个字段
field_c
您将获得所选项目的值