我有一个问题,我找不到解决方案.
我正在使用Razor,这是我的VieModel类.
我正在使用Razor,这是我的VieModel类.
- public class GroupToExport
- {
- public GroupToExport()
- {
- ToExport = false;
- }
- [DisplayName("Export")]
- public bool ToExport { get; set; }
- public Group Group { get; set; }
- }
- public class GroupsToExport
- {
- public GroupsToExport()
- {
- //refill list
- }
- public List<GroupToExport> ExportingGroups { get; set; }
- }
视图:
- @using (Html.BeginForm("Export","ElmahGroup",FormMethod.Post,new { id = "toExportForm" }))
- {
- //some divs
- <input type="submit" id="js-export-submit" value="Export" />
- @foreach (var item in Model.ExportingGroups)
- {
- <tr>
- <td class="js-export-checkBox">
- @Html.CheckBoxFor(modelItem => item.ToExport)
- </td>
- </tr>
- }
- //some divs
- }
控制器:
- public ActionResult Export(GroupsToExport model)
- {
- var groupsToExport = model.ExportingGroups.Where(x => x.ToExport).Select(x => x);
- throw new System.NotImplementedException();
- }
在提交“ToExport”后,在Controller中,每个组的值始终为’false’.即使检查了所有组.
有人能帮助我吗?我做错了什么?
解决方法
您不能使用foreach循环来为集合生成控件.您为每个复选框(以及相关的隐藏输入)生成的html是< input type =“checkBox”name =“item.ToExport”... />.您的模型不包含名为item的属性.
使用for循环
现在你的HTML将是
- <input name="ExportingGroups[0].ToExport" .../>
- <input name="ExportingGroups[1].ToExport" .../>
等将正确绑定到您的模型
编辑
或者,您可以使用自定义EditorTemplate for typeof GroupToExport.创建部分视图/Views/Shared/EditorTemplates/GroupToExport.cshtml
然后在主视图中
- @Html.EditorFor(m => m.ExportingGroups)