在ASP.NET MVC中进行分页的最优选和最简单的方法是什么?即,将列表分成几个可浏览页面的最简单方法是什么。
举例来说,假设我从数据库/网关/存储库中获取了这样的元素列表:
public ActionResult ListMyItems() { List<Item> list = ItemDB.GetListOfItems(); ViewData["ItemList"] = list; return View(); }
为了简单起见,我只想为我的操作指定页码作为参数。像这样:
public ActionResult ListMyItems(int page) { //... }
那么,数据源是什么?您的操作可以采用一些默认参数,即
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 });
要拆分提要,可以很容易地使用LINQ:
var page = source.Skip(startIndex).Take(pageSize);
(如果您使用“ pageNumber”而不是“ startIndex”,则进行乘法运算)
使用LINQ-toSQL,EF等-这也应该“组成”到数据库。
然后,您应该可以使用指向下一页的操作链接(等):
<%=Html.ActionLink("next page", "Search", new { query, startIndex = startIndex + pageSize, pageSize }) %>