ASP.NET MVC 4和MVCCONTRIB网格:每个TR的渲染复选框,并以复杂类型为单位



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

最新更新