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

前端之家收集整理的这篇文章主要介绍了c# – 剃刀中的多个复选框(使用foreach)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个问题,我找不到解决方案.
我正在使用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循环

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

现在你的HTML将是

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

等将正确绑定到您的模型

编辑

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

@model yourAssembly.GroupToExport
<tr>
  <td class="js-export-checkBox">
    @Html.CheckBoxFor(m => m.ToExport)
  </td>
</tr>

然后在主视图中

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

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

猜你在找的C#相关文章