Html.Grid, содержащий флажок для каждой строки - PullRequest
1 голос
/ 23 августа 2010

Я использую Html.Grid в своем приложении asp.net MVC2.

Сетка содержит флажки для каждой строки.

<%= Html.Grid<MyViewModel>(Model.MyList)
        .Columns( column => {
            column.For(x => Html.CheckBox("Select", false, new { id = x.ID })).DoNotEncode();

Мне нужно пройтись по проверенным записям и выполнить их действие. Как получить проверенные значения идентификатора, когда я выполняю обратную передачу по нажатию кнопки.

Спасибо:)

Ответы [ 2 ]

1 голос
/ 24 августа 2010

Возможно, вы захотите взглянуть на пользовательский ModelBinder.

Я использую сетку, и у меня есть столбец флажка, который выглядит следующим образом:

column.For(x => Html.CheckBox(x.CatalogItemId +  "-rcvd", false)).DoNotEncode().Named("Received");

Моя подпись действия в контроллере для обработки обратной записи такова:

[HttpPost]
public virtual ActionResult Index([ModelBinder(typeof(PendingRecievedItemsBinder))]IEnumerable<ShelfMyndr.Models.Previews.PendingReceivedCatalogItem> rcvdCatalogItems)

Вам просто нужен класс, который реализует IModelBinder. В методе BindModel вы можете сделать что-то вроде этого:

foreach (string key in controllerContext.HttpContext.Request.Form.AllKeys.Where(k => controllerContext.HttpContext.Request[k].Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Length > 1))
        {
            if (key.EndsWith("-rcvd"))
            {
                ci.IsReceived = true;
            }

Используя это, мой контроллер может сосредоточиться на том, что делать со списком элементов, вместо того, чтобы перебирать сам набор Forms.

0 голосов
/ 24 августа 2010

Я работаю с более или менее одинаковым кодом сетки.

Столбец «Флажок», который я определил более или менее так же, как ваш:

column.For(x => Html.SimpleCheckBox("keys", x.Id.ToString())).DoNotEncode();

Сетка обернута вформа.

Форма отправляется обратно по следующему методу.

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Process(IList<int> keys) {
// do stuff with the keys
}

Если в качестве имени флажка выбрано «Выбрать», то, я думаю, имя параметра также будет «Выбрать».

...