【问题标题】:Html.Grid containing checkbox per row每行包含复选框的 Html.Grid
【发布时间】:2010-08-23 08:21:42
【问题描述】:

我在我的 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 值。

谢谢:)

【问题讨论】:

    标签: asp.net-mvc-2 mvccontrib mvccontrib-grid


    【解决方案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 集合本身。

    【讨论】:

      【解决方案2】:

      我使用或多或少相同的网格代码进行此操作。

      我定义的复选框列与您的大致相同:

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

      网格被包裹在一个表单中。

      表单回传到下面的方法。

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

      如果您将“Select”作为复选框名称,那么我猜参数名称也将是 Select。

      【讨论】:

        【解决方案3】:

        你可以这样添加

        x.Add().Encoded(false).Sanitized(false).SetWidth(20).RenderValueAs(y => Html.Raw(" 
        <input type='checkbox' value='"+y.IsAdmin+"' ) />"));
        

        它将在每一行添加复选框。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-05-15
          • 2016-10-27
          • 1970-01-01
          • 2014-01-08
          • 1970-01-01
          • 2012-07-05
          • 2015-07-02
          • 2013-12-07
          相关资源
          最近更新 更多