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一样承担数据的划分工作,而仅仅承担数据的绑定操作,这样真正起到了分页查询显示的效果,可以提高效率。