我正在尝试创建一个视图,其中包含从数据库动态创建的复选框列表,然后在回发表单时检索所选复选框的列表。
我的EF模型包含一个类:
public class ItemIWouldLikeACheckboxFor {
public int Id { get; set; }
public string Description { get; set; }
}
我有一个包含以下列表的视图模型:
public class PageViewModel {
// various other properties
public List<ItemIWouldLikeACheckboxFor> checkboxList { get; set; }
}
我的控制器获取方法:
public ActionResult Create() {
var viewModel = new PageViewModel();
viewModel.checkboxList = db.ItemIWouldLikeACheckboxFors.ToList();
return View(viewModel);
}
我的观点:
<% using (Html.BeginForm()) { %>
<%-- other stuff here... %>
<% foreach (var item in checkboxList) { %>
<%: Html.CheckBox( <!-- what exactly ?????? -->) %>
<% } %>
<%-- other stuff here...%>
<input type="submit" />
<% } %>
我的控制器发布方法:
[HttpPost]
public ActionResult Create(PageViewModel viewModel) {
// do stuff with other fields
// I would like to do something like:
foreach (var item in selectedCheckBoxes) {
// do stuff
}
}
我似乎无法让它发挥作用。我的基本问题在代码片段中作为注释混合在一起,但回顾一下:
答案 0 :(得分:15)
你见过:http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx?
我们基本上编写了自己的控件来呈现HTML,如
<label for="Products"> Select Products </label>
<ul class="checkBoxList">
<li>
<input type="hidden" value="0" name="Products.Index">
<input type="checkbox" value="3424" name="Products[0].Id" id="Products0">
<label for="Products0">iPod touch 3rd Generation</label>
</li>
<li>
<input type="hidden" value="1" name="Products.Index">
<input type="checkbox" value="3123" name="Products[1].Id" id="Products1">
<label for="Products1">Creative Zen</label>
</li>
</ul>
</div>
模型看起来不错,我们编写了一个自定义助手,因此我们的aspx页面如下所示:
<%= Html.DropDownFor(m=>m.products) %>
如果您关注phil haacks post,您的模型应自动绑定到您的控制器中。
答案 1 :(得分:2)
这个问题也是一个很好的答案:CheckBoxList multiple selections: difficulty in model bind back
它有一个使用自定义编辑器模板的解决方案。