0

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

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

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

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

4

5 回答 5

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,那么您需要付出更多的额外努力。

ref :如何在 ajax 请求后更改 URL?

于 2014-10-09T04:00:35.437 回答
0

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

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

于 2013-06-11T05:00:02.630 回答
0

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

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

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

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

编辑

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

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

于 2013-06-11T08:55:06.650 回答
0

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

于 2013-06-11T16:04:54.480 回答
0

如果您查看 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>

于 2015-03-25T00:53:39.703 回答