PagedList是NuGet上提供的一个分页的类库,能对任何IEnumerable<T>进行分页,而且非常简单好用。从NuGet上,可以获取两个DLL:PagedList.dll和PagedList.Mvc.dll。PagedList.dll提供分页的核心操作,PagedList.Mvc.dll是一个辅助类库,在创建分页的UI时候提供简单、可扩展的创建方法。不过PagedList.dll可以用于MVC2及其以上,但是PagedList .Mvc.dll只能用于MVC3(及其以上)。
使用PagedList步骤:
1、首先需要先安装PagedList.Mvc.dll,在程序包中可以直接搜索安装。(在安装PagedList.Mvc.dll的时候会把PagedList.dll也安装好)。
安装这个类库后,在content文件夹下回自动添加分页样式,如图所示:
2、定义前端页面:
@model PagedList.IPagedList<Test13.Models.TestDataDB>
@using PagedList.Mvc;
@{
ViewBag.Title = "PageListFenye";
}
<link href="~/Content/PagedList.css" rel="stylesheet" />
<h2>PageListFenye</h2>
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.First().Uid)
</th>
<th>
@Html.DisplayNameFor(model => model.First().Uname)
</th>
<th>
@Html.DisplayNameFor(model => model.First().Upwd)
</th>
<th>
@Html.DisplayNameFor(model => model.First().Udata)
</th>
<th></th>
</tr>
@foreach (Test13.Models.TestDataDB item in Model)
{
<tr>
<td>@item.Uid</td>
<td>@item.Uname</td>
<td>@item.Upwd</td>
<td>@item.Udata</td>
<td>
@Html.ActionLink("编辑", "Edit", new { id=item.ID }) |
@Html.ActionLink("查看详细", "Details", new { id=item.ID }) |
@Html.ActionLink("删除", "Delete", new { id=item.ID })
</td>
</tr>
}
</table>
@Html.PagedListPager(Model, page => Url.Action("PageListFenye", new { page=page }),new PagedListRenderOptions{ LinkToFirstPageFormat="首页",LinkToPreviousPageFormat = "上一页", LinkToNextPageFormat = "下一页",LinkToLastPageFormat="尾页",MaximumPageNumbersToDisplay=5 })
3、定义控制器代码:
public ActionResult PageListFenye(int? page)
{
int pageIndex = page ?? 1;
int pageSize = 1;
int totalCount = 0;
var persons = GetPerson(pageIndex, pageSize, ref totalCount);
var personsAsIPagedList = new StaticPagedList<TestDataDB>(persons, pageIndex, pageSize, totalCount);
return View(personsAsIPagedList);
}
public List<TestDataDB> GetPerson(int pageIndex, int pageSize, ref int totalCount)
{
var persons = (from p in db.TestDataDBS orderby p.ID descending select p).Skip((pageIndex - 1) * pageSize).Take(pageSize);
totalCount = db.TestDataDBS.Count();
return persons.ToList();
}
最后上个效果图:
需要注意的是:
1、这里的参数名不能随意改,因为该参数名与分页参数是对应的。
2、上面的控制器处理分页的代码总之所以分开实现是因为:StaticPagedList需要将某一页的数据、页码、每页数据的容量、和数据总条目传入,也就是说这时候StaticPagedList不再像PagedList一样承担数据的划分工作,而仅仅承担数据的绑定操作,这样真正起到了分页查询显示的效果,可以提高效率。