Html.Grid, содержащий флажок для каждой строки
Я использую Html.Grid в моем приложении asp.net MVC2.
Сетка содержит флажки для каждой строки.
<%= Html.Grid<MyViewModel>(Model.MyList)
.Columns( column => {
column.For(x => Html.CheckBox("Select", false, new { id = x.ID })).DoNotEncode();
Мне нужно пройтись по проверенным записям и выполнить их действие. Как я могу получить проверенные значения идентификатора, когда я делаю обратную передачу по нажатию кнопки.
Спасибо:)
3 ответа
Возможно, вы захотите взглянуть на пользовательский 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;
}
Используя это, мой контроллер может сосредоточиться на том, что делать со списком элементов, вместо того, чтобы перебирать саму коллекцию форм.
У меня это работает с более или менее одним и тем же кодом сетки.
Столбец Checkbox, который я определил более или менее так же, как ваш:
column.For(x => Html.SimpleCheckBox("keys", x.Id.ToString())).DoNotEncode();
Сетка завернута в форму.
Форма отправляет обратно к следующему методу.
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Process(IList<int> keys) {
// do stuff with the keys
}
Если в качестве имени флажка выбрано "Выбрать", то, я думаю, имя параметра также будет "Выбрать".
Вы можете добавить вот так
x.Add().Encoded(false).Sanitized(false).SetWidth(20).RenderValueAs(y => Html.Raw("
<input type='checkbox' value='"+y.IsAdmin+"' ) />"));
он добавит флажок в каждой строке.