关于MVC4使用PagedList.mvc分页

时间:2021-05-13 19:47:58

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文件夹下回自动添加分页样式,如图所示:

关于MVC4使用PagedList.mvc分页

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();
        }

最后上个效果图:

关于MVC4使用PagedList.mvc分页关于MVC4使用PagedList.mvc分页

需要注意的是:

1、关于MVC4使用PagedList.mvc分页关于MVC4使用PagedList.mvc分页这里的参数名不能随意改,因为该参数名与分页参数是对应的。

2、上面的控制器处理分页的代码总之所以分开实现是因为:StaticPagedList需要将某一页的数据、页码、每页数据的容量、和数据总条目传入,也就是说这时候StaticPagedList不再像PagedList一样承担数据的划分工作,而仅仅承担数据的绑定操作,这样真正起到了分页查询显示的效果,可以提高效率。