您可能想看看自定義的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集合本身就做什麼用的項目列表做。