【问题标题】:post items of webgrid asp.net mvc3webgrid asp.net mvc3的post项目
【发布时间】:2013-02-13 08:43:07
【问题描述】:

我有这些 DTO

public class Header
{
    public int HeaderId{get;set;}
    public int Description{get;set;}
    public List<HeaderItem> HeaderItems{get;set;}

}

public class HeaderItem
{
    public int HeaderItemId{get;set;}
    public string DetailDescription{ get; set; }
    public bool Selected{ get; set; }
}

我有这个控制器

    [HttpPost]
    public ActionResult PostMethod(Header dto)
    {
        ...
    }

还有这个html

  @using (Html.BeginForm("PostMethod", "Controller", FormMethod.Post, new { id = "form" }))

{

@Html.TextBoxFor(x => x.Description)    

var grid = new WebGrid(Model.HeaderItems);
    }
    @grid.GetHtml(tableStyle: "grid",
    htmlAttributes: new { id = "grid" },
    columns: grid.Columns(
    grid.Column("Selected", "Seç", format: (item) => Html.CheckBox(String.Format("Selected_{0}", (int)item.HeaderItemId), false)),
    grid.Column("HeaderItemId", "", format: (item) => Html.Hidden("HeaderItemId")),
    grid.Column("DetailDescription", "Description")
    )

}

因此,此网格有一个复选框和一个 HiddenField,其中包含每行的 HeaderItemId 值。

我想发布我的表单并填写我的 Header 类的属性 HeaderItems。

我怎样才能找到这个解决方案?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 webgrid


    【解决方案1】:

    我怎样才能找到这个解决方案?

    像这样:

    columns: grid.Columns(
        grid.Column(
            "Selected", 
            "Seç", 
            format: 
                @<text>
                    @{ var index = Guid.NewGuid().ToString(); }
                    @Html.Hidden("HeaderItems.Index", index)
                    @Html.Hidden("HeaderItems[" + index + "].HeaderItemId", (int)item.HeaderItemId)
                    @Html.CheckBox("HeaderItems[" + index + "].Selected", (bool)item.Selected)
                </text>
        ),
        grid.Column("HeaderItemId")
        grid.Column("DetailDescription", "Description")
    )
    

    【讨论】:

    • 有没有办法在 PartialView 中实现这个?
    【解决方案2】:

    尝试将Html.CheckBox 更改为Html.CheckBoxFor,将Html.Hidden 更改为Html.HiddenFor

    应该是:

    @grid.GetHtml(tableStyle: "grid",
        htmlAttributes: new { id = "grid" },
        columns: grid.Columns(
                 grid.Column("Selected", "Seç", format: (item) => Html.CheckBoxFor(m => item.HeaderItemId)),
                 grid.Column("HeaderItemId", "", format: (item) => Html.Hidden(m => item.HeaderItemId)),
                 grid.Column("DetailDescription", "Description")
        )
    )
    

    我还没有测试过它以为...

    【讨论】:

    • 不,这行不通。您无法在 item 上调度扩展方法,因为 item 是动态的。
    猜你喜欢
    • 2012-02-18
    • 1970-01-01
    • 2011-09-14
    • 2011-12-07
    • 2011-07-04
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 2011-10-05
    相关资源
    最近更新 更多