PagedList를 사용하여 ASP.NET MVC에서 페이지 네이션

이 기사 개요



웹 앱에서 페이지 처리가 필요한 장면은 많지만 자력으로 구현하는 것은 힘들다.
Paginate 기능이 표준으로 붙어 있는 프레임워크도 있습니다만, ASP.NET MVC에는 없을 것 같기 때문에 PagedList 라고 하는 라이브러리를 사용해 본다.

PagedList (PagedList.MVC) 란 무엇입니까?



PagedList 는 Nuget 로 제일 DL 되고 있는 페이지 네이션용 라이브러리.
PagedList.MVC 는 HTML 헬퍼용의 라이브러리가 되기 때문에 양쪽 모두 세트로 인스톨 합니다.
(PagedList.MVC 쪽을 설치하면 PagedList도 함께 설치됩니다)
htps : // 기주 b. 코 m / T로 y 오오 데 / 파게 d st
htps //w w. 젖꼭지 t. 오 rg / 파 c 게 s / 파게 d ぃ st. Mvc

사용법(Model, Controller측)


// データベースから取得するためのIQueryable型を用意
IQueryable<Book> books = dbSet
    .Where(b => b.Price < 3000)
    .OrderBy(b => b.Title);

int pageNumber = 1; // ページ番号
int pageSize = 20;  // 1ページに表示する件数

IPagedList<Book> bookPages = books.ToPagedList(pageNumber, pageSize); // Bookをページで取得

기본적인 사용법은 IQueryable 형에 대해서 확장 메소드 ToPagedList() 로 페이지 번호와 사이즈를 지정하는 것만.
IPagedList 형은 IEnumerable 형을 계승해 페이지 정보의 프로퍼티를 구현한 것.
books 는 ToPagedList() 런타임시, 필요한 개수의 LIMIT구를 SQL에 더한 형태로 지연 평가됩니다.

게다가 ToPagedList() 는 IQueryable 형의 확장 메소드이므로, 지난번 소개한 AutoMapper 의 매핑에 대해서도 그대로 실행할 수 있습니다.
IPagedList<BookViewModel> books = dbSet
    .Where(b => b.Price < 3000)
    .OrderBy(b => b.Title)
    .ProjectTo<BookViewModel>() // AutoMapperによるBookViewModelへのマッピング
    .ToPagedList(1, 20); // そのままメソッドチェーンで即時評価

이와 같이 LINQ to Entities라면 세분화, 정렬, 매핑, 페이지네이션을 모두 연결하여 한 번에 실행할 수 있습니다. 편리.

사용법(View측)



표시측은 이렇게

.cshtml
@using PagedList
@using PagedList.Mvc;
@model IPagedList<App.Models.Book> // IPagedList型で渡す

...

foreach(var book in Model) {
    // IEnumerableを継承しているので、何も意識せずリストアップ可能
}

// ページ番号表示
@Html.PagedListPager(Model, page => Url.Action("Index", page))

Bootstrap에 대응하고 있으므로, Bootstrap을 도입하고 있으면 페이지 번호는 다음과 같은 표시가 됩니다.


또, PagedListRenderOptions 를 PagedListPager() 의 제 3 인수에 지정하면, 미리 준비된 스타일을 간단하게 사용할 수 있습니다.



마지막으로



2일 연속으로, IQueryable형의 메리트와 단골 라이브러리를 소개했습니다.
계속해서 ASP.NET Advent Calendar 2015를 즐기십시오.

좋은 웹페이지 즐겨찾기