MVC4 WebGrid和Ajax分页

时间:2013-01-25 03:04:54

标签: c# jquery ajax asp.net-mvc asp.net-mvc-4

我在MVC4中使用WebGrid有一个简单的问题(可能不是一个简单的答案!)。

我有一个像这样的功能网格

<div id="Submitted">
    @Html.Grid(
        Model.Submitted, displayHeader: false, fieldNamePrefix: "Submitted_", ajaxUpdateContainerId: "Submitted",
        columns: new WebGridColumn[]{
        new WebGridColumn(){ ColumnName = "Date",Header = "Date",Style = "",CanSort = false,Format = x => x.Date.ToString(Globals.Default.DATEFORMAT) },
        new WebGridColumn(){ ColumnName = "ID",Header = "Review",Style = "", CanSort = false, Format = x=>@Html.ActionLink("Review","Review","Company",new{ID = x.ID },new{})  }
    })
</div>

当单击下一页按钮时,使用Ajax重新加载“已提交”div时,它会生成下一页正常 - 但它将转到控制器上的原始操作,该操作应为整页。

如何过滤网格本身以外的所有内容?用一些聪明的C#代码或jQuery?

编辑: 为了澄清,我不是要问如何更好地进行分页,或者我自己,只要我担心webgrid的默认分页工作完全正常 - 我问的是WebGrid如何做ajax分页时回发给返回FULL页面的动作。

2 个答案:

答案 0 :(得分:2)

它使用jquery load()和允许它仅选择相关传入节点的功能来实现此目的。这取自http://msdn.microsoft.com/en-us/magazine/hh288075.aspx

  

为了允许脚本仅应用于WebGrid,它使用jQuery选择器来标识具有ajaxGrid类集的元素。该脚本使用jQuery live方法(api.jquery.com/live)为排序和分页链接(通过网格容器内的表头或页脚标识)建立单击处理程序。这为匹配选择器的现有和未来元素设置事件处理程序,这很方便,因为脚本将替换内容。

答案 1 :(得分:0)

您应该将网格放在partialview中并通过Ajax更新它。在控制器中,您应该找到请求的类型。如果是ajax请求(通过Request.IsAjaxRequest()),则必须返回partialview,否则必须返回原始视图。

如果您使用的是ajax.beginform,则必须执行以下操作:

@using (Ajax.BeginForm("Index", new AjaxOptions { OnFailure = "searchFailed", HttpMethod = "POST", UpdateTargetId = "Submitted" }))
    {
    ...
    }

<div id="Submitted">
   @Html.Partial("_partialviewname", Model)    
</div>

RN 并在控制器中:

  public ActionResult Index(int? page)
    {
      ...
      if (Request.IsAjaxRequest())
        {
          return PartialView("_partialviewname", db.model)  
         }
      return View(db.model)

    }