Возможно, вы захотите взглянуть на пользовательский 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.