c# asp.net checkbox asp.net-mvc-4 mvccontrib-grid

c# - ASP.NET MVC 4 y MVCContrib Grid: Render Checkbox para cada TR y valores de Post en tipo complejo



asp.net-mvc-4 mvccontrib-grid (1)

Te recomendaría usar un modelo de vista real que refleje los requisitos de tu vista (mostrar una cuadrícula que contenga para cada fila una casilla de verificación, y mostrar la identificación y el nombre del elemento y recuperar esos valores en una lista en tu devolución) :

public class CheckBoxViewModel { public int Id { get; set; } public string Name { get; set; } public bool CheckBox { get; set; } } public class ViewModel { public IPagination<CheckBoxViewModel> List { get; set; } }

y luego tiene su vista fuertemente tipada a este modelo de vista:

@model ViewModel @using (Html.BeginForm("SendData", "Home", FormMethod.Post)) { @Html.Grid(Model.List).Columns(c => { c.For(x => x.Id); c.For(x => x.Name); c.For(x => Html.Partial("Partial/CheckBoxTemplate", x)).Named("Options"); }) <button type="submit">OK</button> }

finalmente su parcial podría verse así:

@model CheckBoxViewModel @{ var index = Guid.NewGuid().ToString(); } @Html.Hidden("list.Index", index) @Html.Hidden("list[" + index + "].Id", Model.Id) @Html.Hidden("list[" + index + "].Name", Model.Name) @Html.CheckBox("list[" + index + "].CheckBox", Model.CheckBox)

Ahora cuando se invoca la acción SendData , se pasará a la lista de su modelo de vista.

Alternativamente, podría usar el helper Html.BeginCollectionItem presentado en el following article que le permitiría usar las versiones fuertemente tipadas de los helpers:

@model CheckBoxViewModel @using(Html.BeginCollectionItem("list")) { @Html.HiddenFor(x => x.Id) @Html.HiddenFor(x => x.Name) @Html.CheckBoxFor(x => x.CheckBox) }

Lectura adicional recomendada: Model Binding To A List .

MVCContrib Grid:

@model ViewModel @using (Html.BeginForm("SendData", "Home", FormMethod.Post)) { @Html.Grid(Model.List).Columns(c => { c.For(x => x.Id); c.For(x => x.Name); c.For(x =>Html.Partial("Partial/CheckBoxTemplate", new CheckBoxViewModel { Id = x.Id })).Named("Options"); }) @Html.SubmitButton() }

Acción del poste del regulador:

public ActionResult SendData(List<CheckBoxViewModel> list) { return View(); }

ViewModels:

public class CheckBoxViewModel { public int Id { get; set; } public bool CheckBox { get; set; } } public class ViewModel { public IPagination<Data> List { get; set; } } public class Data { public int Id { get; set; } public string Name { get; set; } }

Vista parcial:

@model MvcApplication1.Models.CheckBoxViewModel @Html.HiddenFor(x => x.Id) @Html.CheckBoxFor(x => x.CheckBox)

Todas las casillas de verificación están por defecto no marcadas.

¿Cómo puedo recuperar todos los valores de casilla SendData en mi acción SendData ?