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
?