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()
}
控制器帖子行动:
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; }
}
部分视图:
@model MvcApplication1.Models.CheckBoxViewModel
@Html.HiddenFor(x => x.Id)
@Html.CheckBoxFor(x => x.CheckBox)
所有复选框默认未检查。
我如何在SendData
操作中检索所有检查的复选框值?
我建议您使用一个真实的视图模型,该模型将反映您的视图要求(显示每行包含一个复选框的网格,并显示项目的ID和名称和名称在您的回发操作中的列表中检索这些值):
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; }
}
,然后将您的视图强烈键入此视图模型:
@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>
}
最后,您的部分看起来像这样:
@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)
现在,当调用SendData
操作时,它将通过您的视图模型列表。
另外,您可以使用following article
中显示的Html.BeginCollectionItem
助手
@model CheckBoxViewModel
@using(Html.BeginCollectionItem("list"))
{
@Html.HiddenFor(x => x.Id)
@Html.HiddenFor(x => x.Name)
@Html.CheckBoxFor(x => x.CheckBox)
}
建议进一步阅读:Model Binding To A List
。