ASP.NET MVC 4和MVCContrib网格:渲染复选框在复杂类型的每个TR和邮政值(ASP

2019-08-02 01:47发布

MVCContrib网格:

@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()
}

控制器POST操作:

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)

所有checkboxed默认情况下不进行检查。

我怎样才能找回我的所有选中的复选框值SendData的动作?

Answer 1:

我会建议你使用,这将反映您观的要求(显示包含于各行的复选框一个网格,显示物品的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被调用的动作将通过您的视图模型的列表。

另外,您可以使用Html.BeginCollectionItem中提出的助手following article ,这将允许您使用助手的强类型版本:

@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



文章来源: ASP.NET MVC 4 and MVCContrib Grid: Render Checkbox for each TR and Post values in complex type