我在我的asp.net MVC2应用程序中使用Html.Grid。
网格包含每行的复选框。
<%= Html.Grid<MyViewModel>(Model.MyList)
.Columns( column => {
column.For(x => Html.CheckBox("Select", false, new { id = x.ID })).DoNotEncode();
我需要遍历已检查的记录并对其进行操作。如何在单击按钮上进行回发时,如何检索已检查的id值。
谢谢:)
答案 0 :(得分:1)
您可能想要查看自定义的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集合本身进行迭代。
答案 1 :(得分:0)
我使用或多或少相同的网格代码。
我定义的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
}
如果您有“选择”作为复选框名称,那么我猜参数名称也将是选择。
答案 2 :(得分:0)
你可以这样添加
- { path: ^/admin/select-customer-status, roles: ROLE_EXTENDED_ADMIN }
它会在每一行添加复选框。