Spo*_*ike 81 c# asp.net asp.net-mvc
在ASP.NET MVC中进行分页的最优选和最简单的方法是什么?即将列表拆分为多个可浏览页面的最简单方法是什么.
举个例子,我可以从数据库/网关/存储库中获取一个元素列表,如下所示:
public ActionResult ListMyItems()
{
List<Item> list = ItemDB.GetListOfItems();
ViewData["ItemList"] = list;
return View();
}
Run Code Online (Sandbox Code Playgroud)
为简单起见,我想为我的操作指定一个页码作为参数.像这样:
public ActionResult ListMyItems(int page)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ell 100
那么,什么是数据源?你的行动可以采取一些默认的论点,即
ActionResult Search(string query, int startIndex, int pageSize) {...}
Run Code Online (Sandbox Code Playgroud)
默认路由设置,以便startIndex为0,pageSize为(比方说)20:
routes.MapRoute("Search", "Search/{query}/{startIndex}",
new
{
controller = "Home", action = "Search",
startIndex = 0, pageSize = 20
});
Run Code Online (Sandbox Code Playgroud)
要拆分Feed,您可以非常轻松地使用LINQ:
var page = source.Skip(startIndex).Take(pageSize);
Run Code Online (Sandbox Code Playgroud)
(如果使用"pageNumber"而不是"startIndex",则进行乘法运算)
使用LINQ-toSQL,EF等 - 这也应该"组合"到数据库.
然后,您应该能够使用动作链接到下一页(等):
<%=Html.ActionLink("next page", "Search", new {
query, startIndex = startIndex + pageSize, pageSize }) %>
Run Code Online (Sandbox Code Playgroud)
小智 15
我遇到了同样的问题,并为一个Pager Class找到了一个非常优雅的解决方案
http://blogs.taiga.nl/martijn/2008/08/27/paging-with-aspnet-mvc/
在您的控制器中,通话看起来像:
return View(partnerList.ToPagedList(currentPageIndex, pageSize));
Run Code Online (Sandbox Code Playgroud)
在你看来:
<div class="pager">
Seite: <%= Html.Pager(ViewData.Model.PageSize,
ViewData.Model.PageNumber,
ViewData.Model.TotalItemCount)%>
</div>
Run Code Online (Sandbox Code Playgroud)
dav*_*v_i 14
我想通过前端介绍一种简单的方法:
控制器:
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);
}
Run Code Online (Sandbox Code Playgroud)
视图:
@* rest of file with view *@
@if (ViewBag.Page > 0)
{
<a href="@Url.Action("Index", new { page = ViewBag.Page - 1 })"
class="btn btn-default">
« Prev
</a>
}
@if (ViewBag.Page < ViewBag.MaxPage)
{
<a href="@Url.Action("Index", new { page = ViewBag.Page + 1 })"
class="btn btn-default">
Next »
</a>
}
Run Code Online (Sandbox Code Playgroud)
它使用 PagedList.MVC NuGet 包。我会尝试总结步骤
安装 PagedList.MVC NuGet 包
构建项目
添加 using PagedList; 到控制器
修改您的操作以设置页面
public ActionResult ListMyItems(int? page)
{
List list = ItemDB.GetListOfItems();
int pageSize = 3;
int pageNumber = (page ?? 1);
return View(list.ToPagedList(pageNumber, pageSize));
}
在视图底部添加分页链接
@*Your existing view*@
Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount
@Html.PagedListPager(Model, page => Url.Action("Index",
new { page, sortOrder = ViewBag.CurrentSort, currentFilter = ViewBag.CurrentFilter }))
| 归档时间: |
|
| 查看次数: |
132789 次 |
| 最近记录: |