【问题标题】:URL of Page 2 in Asp.net MVC WebGridAsp.net MVC WebGrid 中第 2 页的 URL
【发布时间】:2013-06-11 04:55:47
【问题描述】:

我正在使用 Asp.Net MVC WebGrid。我的网格是通过局部视图的 ajax 调用出现的。因此分页不起作用。每当我点击第二页时,整个页面都会刷新,并且 url 变成了

    http://localhost:2429/mvc/SSP/Home/SearchQuery?page=2

显然没有找到 (404)。我认为 Webgrid 分页不适用于部分视图。因此,我决定在每个页面链接上进行 jquery ajax 调用。为此,我需要一个可以从 Webgrid 中提取第二页数据的 url。

那么,有没有办法找到webgrid第二页的url,以便我可以从webgrid中提取数据并显示在第二页上。

【问题讨论】:

    标签: c# jquery asp.net-mvc


    【解决方案1】:

    我认为你需要这个,

    对于分页,您可以使用 MVC4.Paging。

    @Html.Raw(Ajax.Pager(
           new Options
           {
               PageSize = Model.PageSize,
               TotalItemCount = Model.TotalItemCount,
               CurrentPage = Model.PageNumber,
               ItemTexts = new ItemTexts() { Next = "Next", Previous = "Previous", Page = "P" },
               ItemIcon = new ItemIcon() { First = "icon-backward", Previous = "icon-chevron-left", Next = "icon-chevron-right", Last = "icon-forward" },
               TooltipTitles = new TooltipTitles() { Next = "Next page", Previous = "Previous page", Page = "Go to page {0}.", First = "Go To First Page", Last = "Go To Last Page" },
               Size = Size.normal,
               Alignment = Alignment.centered,
               IsShowControls = true,
               IsShowFirstLast = true
           },
           new AjaxOptions
           {
               UpdateTargetId = "grid-list",
               OnBegin = "beginPaging",
               OnSuccess = "successPaging",
               OnFailure = "failurePaging"
           }, new { controller = "Home", action = "Index", employee_name = ViewData["employee_name"] }))
    

    参考:http://mvcpaging.apphb.com/

    我已经实现了它并且它有效!!!

    示例中提到了没有回发的分页。

    安装nuGet包后,

    在将模型传回 View 或 PartialView 时,您需要使用 ToPagedList 对其进行转换

    myModel = myModel.ToPagedList(currentPageIndex,rowSize);
    

    上面的代码会为你变魔术!

    但是如果您想在 AJAX 调用之后更改您的 URL,那么您需要付出更多的额外努力。

    参考:How to change URL after an ajax request?

    【讨论】:

      【解决方案2】:

      您还必须使用基于 Ajax 的分页来设计您的网格。现在,您正在为分页渲染锚标记,这将导致整个页面加载。

      有开箱即用的网格控件支持这一点。 Telerik Kendo 网格就是一个很好的例子

      【讨论】:

        【解决方案3】:

        这篇文章可能对你有所帮助

        http://msdn.microsoft.com/en-us/magazine/hh288075.aspx

        这不仅仅是将页码传递给网格那么简单,您需要将 PageSize 和 PageNumber 存储为模型的一部分。然后从视图中调用 Bind 方法。

        过去,我个人创建了自己的分页助手,因此在控制器中传入(PageSize、TotalCount、CurrentPage)并从中带回数据的子集。这也可以防止控制器先取回所有数据,然后再对其进行分页,这对于大量数据集来说效率不高。

        编辑

        我发现的另一篇文章解释了我上面的意思(第二部分)。

        http://www.dotnetcurry.com/ShowArticle.aspx?ID=615

        【讨论】:

          【解决方案4】:

          使用 MVC WebGrid 时不会自动分页数据。您在 webgrid 中看到的分页用于自定义分页,这意味着您必须自己处理。 webgrid 所做的只是将页码作为参数发送给 actionresult,然后您使用该页码获取并返回与该页码相关的数据集(即 list.skip(pagesize * pagenumber).take(pagesize) )。希望这会有所帮助。

          【讨论】:

            【解决方案5】:

            如果您查看 webgrid 是如何生成的,您会注意到 grid.GetHtml 返回一个 IHtmlString

            您实际上可以将其转换为字符串并替换您想要替换的任何内容。在您的情况下,您想替换分页网址。

            var html = grid.GetHtml(...).ToHtmlString().Replace("home/index?page", "home/MyPartialGrid?page");

            然后您可以创建MvcHtmlString 的新实例来生成网格。

            
            var htmlString = new MvcHtmlString(html);
            
            
            <div id="myPartialGrid">
                @htmlString
            </div>

            【讨论】:

              猜你喜欢
              • 2012-06-21
              • 2011-05-10
              • 2016-04-04
              • 2011-07-03
              • 2011-06-30
              • 2018-04-01
              • 2012-05-22
              • 2012-09-03
              相关资源
              最近更新 更多