2011-11-02 10 views
7

necesito para mostrar una lista de casillas de verificación, que más de uno se puede comprobar.MVC3 cómo enlazar múltiples casillas de verificación para 1 Propiedad en ViewModel

Si el usuario selecciona someten, el valor de estas casillas necesidad de entrar en una propiedad en el modelo de vista ... esto es lo que tengo hasta ahora ...

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

En la vista que estoy tratando para hacer esto ...

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

me sale el siguiente error:

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

puede alguien decirme lo que estoy haciendo mal?

Respuesta

17

simple: adaptar sus modelos de vista para que coincida con su requisito de puntos de vista (que es para mostrar una lista de casillas de verificación para algunas funciones), editor de plantillas de uso y evitar escribir bucles en sus puntos de vista.

Así:

Ver modelo:

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

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

controlador:

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); 
    } 
} 

Ver (~/Views/Home/Index.cshtml):

@model RegisterModel 

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

editor de plantillas (~/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

¡Gracias por la respuesta rápida! – thiag0

+0

@ thiag0, eres bienvenido. –

+0

tan simple y funciona muy bien! – tsquillario

Cuestiones relacionadas