2011-02-02 10 views
52

¿Cómo puedo crear un CheckBoxList en asp.net MVC y después de manejar el evento con el CheckBoxListCheckBoxList en MVC3.0

+0

Prueba esta [casilla de verificación y Plantillas de Radio Button Editor en Mvc 4] (http://www.jquery2dotnet.com/2013/06/checkbox-and-radio-button- editor.html) – Sender

Respuesta

64

Usted podría tener una vista de modelo:

public class MyViewModel 
{ 
    public int Id { get; set; } 
    public bool IsChecked { get; set; } 
} 

Un controlador:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new[] 
     { 
      new MyViewModel { Id = 1, IsChecked = false }, 
      new MyViewModel { Id = 2, IsChecked = true }, 
      new MyViewModel { Id = 3, IsChecked = false }, 
     }; 
     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Index(IEnumerable<MyViewModel> model) 
    { 
     // TODO: Handle the user selection here 
     ... 
    } 
} 

A View (~/Views/Home/Index.cshtml):

@model IEnumerable<AppName.Models.MyViewModel> 
@{ 
    ViewBag.Title = "Home Page"; 
} 
@using (Html.BeginForm()) 
{ 
    @Html.EditorForModel() 
    <input type="submit" value="OK" /> 
} 

y la plantilla correspondiente Editor (~/Views/Home/EditorTemplates/MyViewModel.cshtml):

@model AppName.Models.MyViewModel 
@Html.HiddenFor(x => x.Id)   
@Html.CheckBoxFor(x => x.IsChecked) 

Ahora, cuando se envía el formulario que se obtendría una lista de valores y para cada valor para determinar si se comprueba o no.

+0

¡Impresionante, este es definitivamente el camino a seguir! – superlogical

+0

Hola Darin Dimitrov - Tengo una pregunta. Estaba probando esto y pude hacerlo funcionar. Tengo un ayudante de HTML trabajando para esto. Pero quería probar este enfoque también. En mi caso, las etiquetas para las casillas de verificación son dinámicas, por lo que estoy buscando una forma de vincularlas a la plantilla del editor. ¿Puedes por favor recomendar una forma de hacerlo? ¡Gracias! – k25

+1

También publiqué una pregunta con respecto a esto, justo ahora. Consulte en caso de que tenga unos minutos: http://stackoverflow.com/questions/6695022/asp-net-mvc-3-checkbox-need-some-suggestions y un +1 para una solución tan elegante. – k25

19

No hay manera aún más simple - utilizar @ Html.CheckBoxList() extensión personalizada desde aquí: http://www.codeproject.com/KB/user-controls/MvcCheckBoxList_Extension.aspx

Ejemplo de uso (vista MVC3 con motor de vistas Razor):

@Html.CheckBoxList("NAME",     // NAME of checkbox list 
        x => x.DataList,   // data source (list of 'DataList' in this case) 
        x => x.Id,    // field from data source to be used for checkbox VALUE 
        x => x.Name,    // field from data source to be used for checkbox TEXT 
        x => x.DataListChecked // selected data (list of selected 'DataList' in thiscase), 
              // must be of same data type as source data or set to 'NULL' 
       ) 
+0

Intenté usar eso con VERSIÓN 3.0. El enlace anterior de @ mik-t funcionará solo con .NET 4.0 o 4.5 y MVC4 – Sandeep

+0

La solución anterior fue publicada para la versión anterior de la extensión, funcionó con MVC3 en ese entonces, pruebe esta versión anterior de NuGet, debería funcionar: http : //www.nuget.org/packages/MvcCheckBoxList/1.4.3 –

Cuestiones relacionadas