於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 }))
完工。