опубликовать элементы webgrid asp.net mvc3

У меня есть эти 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 каждой строки.

Я хотел бы опубликовать свою форму и заполнить свойство HeaderItems класса Header.

Как я мог достичь этого решения?


person Aitiow    schedule 27.02.2013    source источник


Ответы (2)


Как я мог достичь этого решения?

Так:

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")
)
person Darin Dimitrov    schedule 27.02.2013
comment
Есть ли способ реализовать это в PartialView? - person Smartis; 06.11.2013

Попробуйте поменять 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")
    )
)

Я не проверял, думал...

person RMalke    schedule 27.02.2013
comment
Нет, это не сработает. Вы не можете отправить метод расширения на item, потому что item является динамическим. - person Darin Dimitrov; 27.02.2013