於Visual Studio可透過NuGet中搜尋「PagedList」安裝:NuGet-PagedList.MVC,
安裝後在專案的「參考」中會出現「PagedList」「PagedList.Mvc」。
Controller
必須注意的一點是,取得資料前一定要先做排序處理(OrderBy),否則分頁處理會出現錯誤,
為提升效率,不必對Query結果做ToList(),最後使用ToPagedList()
...... using PagedList; namespace testProj.Controllers { public class MyDataListController : Controller { private MyEntities db = new MyEntities(); private int pageSize = 5; public ActionResult Index(int page = 1) { int currentPage = page < 1 ? 1 : page; var myDatas = db.MyDataList.OrderBy(x => x.MyDataSeq); var result = myDatas.ToPagedList(currentPage, pageSize); return View(result); } ......
View
- ~/Views/Web.Config:加入Namespace的使用,就不用在要分頁的View中個別加入using了
<system.web.webPages.razor> <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, ...... <pages pageBaseType="System.Web.Mvc.WebViewPage"> <namespaces> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> <add namespace="System.Web.Optimization"/> <add namespace="System.Web.Routing" /> <add namespace="PagedList" /> <add namespace="PagedList.Mvc" /> </namespaces> </pages> </system.web.webPages.razor>
- ~/Views/MyDataList/Index.cshtml:將原本使用的Model型別更改
@model IEnumerable<testProj.Models.MyDataList>
改為
@model IPagedList<testProj.Models.MyDataList>
- 相對的,在table中的th因為Model型別的修改會出現錯誤,也必須更改
@Html.DisplayNameFor(model => model.FirstOrDefault().MyDataSeq)
- 加入~/Content/PagedList.css(@section styles是自己在_Layout.cshtml有先加入的section)
- 設置PagedListPager Html Helper
@Html.PagedListPager(Model, page => Url.Action("Index", new { page }))
完工。