具有List属性的模型中的ASP.NET MVC CheckBoxList

Jon*_*lis 31 c# asp.net-mvc razor

如果标题不清楚,请道歉.

我正在尝试从ASP.NET MVC中的表单提交返回我的模型.

我的问题几乎和这个问题一样,只是因为我没有List<Model>一个像以下那样的模型:

public Model
{
     string UserName {get; set;}
     string Password {get; set;}
     List<Roles> UserRoles {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

我需要UserRoles作为管理员在创建新用户时可以选择的复选框.我的问题是,我不确定如何对列表使用'@ Html.CheckBoxFor'.我试过这个:

 @for (var i = 0; i < Model.UserRoles.Count();i++ )
 {
   @Html.HiddenFor(model => model.UserRoles[i].RoleID)
   @Html.CheckBoxFor(model => model.UserRoles[i].Selected)
   @Html.LabelFor(model => model.UserRoles[i].Name)
 }
Run Code Online (Sandbox Code Playgroud)

这绝不起作用 - 页面上的每个标签都是"名称",我的列表在POST中是空的.有人可以给我任何指导吗?

Liv*_*er9 54

根本不需要离开Razor.

这对我有用:

for (var i = 0; i < Model.UserRoles.Count(); i++)
{
    var role = Model.UserRoles[i];
    @Html.HiddenFor(model => model.UserRoles[i].RoleId)
    @Html.CheckBoxFor(model => model.UserRoles[i].Selected)
    @Html.LabelFor(model=> model.UserRoles[i].Name, role.Name)
}
Run Code Online (Sandbox Code Playgroud)

  • 这很好但是一个小的修正,`LabelFor`应该与`CheckBoxFor`绑定到同一个东西:`@ Html.LabelFor(model => model.UserRoles [i] .Selected,role.Name)` (7认同)
  • 您可以在最后添加@ Html.HiddenFor(model => model.UserRoles [i] .Name)以在post之后获取Name值 (3认同)

Lin*_*Lin 10

请参阅下面的代码,这样您就不需要隐藏角色ID,当您为用户保存所选角色时,也无需遍历所有角色以查看选择了哪个角色.

视图

@foreach (Roles info in Model.UserRoles)
{
    <span>
        <input type="checkbox" class="checkbox" name="selectedRoles" value="@info.RoleName" id="@infoRoleName" />
        <label for="@info.RoleName">@info.RoleName</label>
    </span>
}
Run Code Online (Sandbox Code Playgroud)

行动

[HttpPost]
public ActionResult CreateUsers(Model model, string[] selectedRoles)
{
       //
}
Run Code Online (Sandbox Code Playgroud)

  • 我使用过原生HTML.但你实际上*不能*绑定两个模型.你不能.你不能.你不能.(我提到你不能).如果可以,它将被称为"MsVC". (3认同)
  • 是的,如果你有**两种形式**,你有**两种行为**.不是两个型号.孩子的行为?谐音? (2认同)