CheckboxFor Master List并选中

时间:2012-02-01 17:15:20

标签: asp.net-mvc-3 checkbox model-binding

我有一个包含属性的模型,该属性是其他对象的列表。还有一个包含所有子对象的主列表。我需要以复选框的形式列出所有主对象,但只检查分配给主模型的主对象。这需要在编辑器模板中完成。

例如:

public class User
{
     // This contains a list of all roles the user belongs to
     public List<Role> Roles { get; set; }
{

public class Role
{
     public string Name { get; set; }
     public int ID { get; set; }
}


public class UserAdminModel
{
    public List<User> Users { get; set; }
}

主要观点

@model UserAdminModel

@Html.EditorFor(x => x.Users)

编辑器模板

@model User
<table>
    <colgroup>
        <col class="checkbox-column"/>
        <col/>
    <col style="width:70px;"/>
    </colgroup>
    <tbody>
    @foreach (Role role in allRoles)
    {
        <tr>
            <td>@Html.CheckBoxFor( ... )</td>
            <td>@role.ID
            <td>@role.Name</td>
        </tr>
    }
    </tbody>
</table>    

这里的主要问题是Html.CheckBoxFor部分。我需要确保在这里获得用户的正确ID,以便它将模拟绑定。像User_ 0 _Role_3。

1 个答案:

答案 0 :(得分:0)

编辑模板:

@model User
<table>
    <colgroup>
        <col class="checkbox-column"/>
        <col/>
    <col style="width:70px;"/>
    </colgroup>
    <tbody>
    @for (var i = 0; i < Model.Roles.Count; i++)
    {
        <tr>
            <td>@Html.HiddenFor(x => x.Id, Model.Id)
            @Html.HiddenFor(x => x.Roles[i].Id)
            @Html.CheckBoxFor(x => x.Roles[i].Checked)</td>
            <td>@Model.Roles[i].Id</td>
            <td>@Model.Roles[i].Name</td>
        </tr>
    }
    </tbody>
</table>

角色类:

public class Role
{
    public string Name { get; set; }
    public int Id { get; set; }
    public bool Checked { get; set; }
}

动作:

[HttpPost]
public ActionResult Index(UserAdminModel model)
{
    //...
}