那么,什么是数据源?你的行动可以采取一些默认的论点,即
ActionResult Search(string query, int startIndex, int pageSize) {...}
默认路由设置,以便startIndex为0,pageSize为(比方说)20:
routes.MapRoute("Search", "Search/{query}/{startIndex}", new { controller = "Home", action = "Search", startIndex = 0, pageSize = 20 });
要拆分Feed,您可以非常轻松地使用LINQ:
var page = source.Skip(startIndex).Take(pageSize);
(如果使用"pageNumber"而不是"startIndex",则进行乘法运算)
使用LINQ-toSQL,EF等 - 这也应该"组合"到数据库.
然后,您应该能够使用动作链接到下一页(等):
<%=Html.ActionLink("next page", "Search", new { query, startIndex = startIndex + pageSize, pageSize }) %>
我遇到了同样的问题,并为一个Pager Class找到了一个非常优雅的解决方案
http://blogs.taiga.nl/martijn/2008/08/27/paging-with-aspnet-mvc/
在您的控制器中,通话看起来像:
return View(partnerList.ToPagedList(currentPageIndex, pageSize));
在你看来:
Seite: <%= Html.Pager(ViewData.Model.PageSize, ViewData.Model.PageNumber, ViewData.Model.TotalItemCount)%>
我想通过前端介绍一种简单的方法:
控制器:
public ActionResult Index(int page = 0) { const int PageSize = 3; // you can always do something more elegant to set this var count = this.dataSource.Count(); var data = this.dataSource.Skip(page * PageSize).Take(PageSize).ToList(); this.ViewBag.MaxPage = (count / PageSize) - (count % PageSize == 0 ? 1 : 0); this.ViewBag.Page = page; return this.View(data); }
视图:
@* rest of file with view *@ @if (ViewBag.Page > 0) { « Prev } @if (ViewBag.Page < ViewBag.MaxPage) { Next » }