2012-02-01 36 views
1

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

例如:

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一部分。我需要确保我在这里得到用户的正确标识,以便模型绑定。像User_ _Role_3。

回答

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) 
{ 
    //... 
}