2011-11-02 78 views
7

我需要显示复选框列表,可以选中多个复选框。MVC3如何将多个复选框绑定到ViewModel中的1个属性

当用户点击提交,这些复选框的值需要进入的视图模型的属性......这是我走到这一步......

public class RegisterModel 
{ 
    public List<string> Roles { get; set; } 
    public List<RoleModel> SelectedRoles { get; set; }  
} 
public class RoleModel 
{ 
    public string RoleName { get; set; } 
} 

在视图我想要做到这一点...

@foreach (var role in Model.Roles) 
{ 
    @Html.CheckBoxFor(m => m.SelectedRoles, role.RoleName)@role.RoleName 
} 

我得到以下错误:

CS0029: Cannot implicitly convert type 'System.Collections.Generic.List<string>' to 'bool' 

谁能告诉我什么,我做错了什么?

回答

17

简单:调整您的视图模型以符合您的视图要求(即显示某些角色的复选框列表),使用编辑器模板并避免在视图中编写循环。

所以:

视图模型:

public class RegisterModel 
{ 
    public List<RoleModel> Roles { get; set; } 
} 

public class RoleModel 
{ 
    public string RoleName { get; set; } 
    public bool Selected { get; set; } 
} 

控制器:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new RegisterModel 
     { 
      Roles = new[] 
      { 
       new RoleModel { RoleName = "administrator" }, 
       new RoleModel { RoleName = "developer" }, 
       new RoleModel { RoleName = "janitor :-)" }, 
      }.ToList() 
     }; 
     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Index(RegisterModel model) 
    { 
     // at this stage the model will contain all the 
     // information you need 
     return View(model); 
    } 
} 

视图(~/Views/Home/Index.cshtml):

@model RegisterModel 

@using (Html.BeginForm()) 
{ 
    @Html.EditorFor(x => x.Roles) 
    <button type="submit">OK</button> 
} 

编辑模板(~/Views/Home/EditorTemplates/RoleModel.cshtml ):

@model RoleModel 

<div> 
    @Html.HiddenFor(x => x.RoleName) 
    @Html.CheckBoxFor(x => x.Selected) 
    @Html.LabelFor(x => x.Selected, Model.RoleName) 
</div> 
+0

感谢您的快速响应! – thiag0

+0

@ thiag0,不客气。 –

+0

这么简单,它的效果很棒! – tsquillario

相关问题