c# – 剃刀中的多个复选框(使用foreach)

前端之家收集整理的这篇文章主要介绍了c# – 剃刀中的多个复选框(使用foreach)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个问题,我找不到解决方案.
我正在使用Razor,这是我的VieModel类.
  1. public class GroupToExport
  2. {
  3. public GroupToExport()
  4. {
  5. ToExport = false;
  6. }
  7.  
  8. [DisplayName("Export")]
  9. public bool ToExport { get; set; }
  10. public Group Group { get; set; }
  11.  
  12. }
  13.  
  14. public class GroupsToExport
  15. {
  16. public GroupsToExport()
  17. {
  18. //refill list
  19. }
  20.  
  21. public List<GroupToExport> ExportingGroups { get; set; }
  22. }

视图:

  1. @using (Html.BeginForm("Export","ElmahGroup",FormMethod.Post,new { id = "toExportForm" }))
  2. {
  3. //some divs
  4. <input type="submit" id="js-export-submit" value="Export" />
  5. @foreach (var item in Model.ExportingGroups)
  6. {
  7. <tr>
  8. <td class="js-export-checkBox">
  9. @Html.CheckBoxFor(modelItem => item.ToExport)
  10. </td>
  11. </tr>
  12. }
  13. //some divs
  14. }

控制器:

  1. public ActionResult Export(GroupsToExport model)
  2. {
  3. var groupsToExport = model.ExportingGroups.Where(x => x.ToExport).Select(x => x);
  4. throw new System.NotImplementedException();
  5. }

在提交“ToExport”后,在Controller中,每个组的值始终为’false’.即使检查了所有组.

有人能帮助我吗?我做错了什么?

解决方法

您不能使用foreach循环来为集合生成控件.您为每个复选框(以及相关的隐藏输入)生成的html是< input type =“checkBox”name =“item.ToExport”... />.您的模型不包含名为item的属性.

使用for循环

  1. @for(int i = 0; i < Model.ExportingGroups.Count; i++)
  2. {
  3. <tr>
  4. <td class="js-export-checkBox">
  5. @Html.CheckBoxFor(m => m.ExportingGroups[i].ToExport)
  6. </td>
  7. </tr>
  8. }

现在你的HTML将是

  1. <input name="ExportingGroups[0].ToExport" .../>
  2. <input name="ExportingGroups[1].ToExport" .../>

等将正确绑定到您的模型

编辑

或者,您可以使用自定义EditorTemplate for typeof GroupToExport.创建部分视图/Views/Shared/EditorTemplates/GroupToExport.cshtml

  1. @model yourAssembly.GroupToExport
  2. <tr>
  3. <td class="js-export-checkBox">
  4. @Html.CheckBoxFor(m => m.ToExport)
  5. </td>
  6. </tr>

然后在主视图中

  1. @Html.EditorFor(m => m.ExportingGroups)

EditorFor()方法将根据模板为集合中的每个项生成正确的html.

猜你在找的C#相关文章