@@ -35,25 +35,55 @@ public override void Process(TagHelperContext context, TagHelperOutput output)
3535 TagBuilder tag = new TagBuilder ( "ul" ) ;
3636 tag . AddCssClass ( "pagination" ) ;
3737
38- TagBuilder currentItem = CreateTag ( PagingInformation . CurrentPage , urlHelper ) ;
39-
4038 if ( PagingInformation . HasPreviousPage )
4139 {
42- TagBuilder previousItem = CreateTag ( PagingInformation . CurrentPage - 1 , urlHelper , "Previous" ) ;
43- tag . InnerHtml . AppendHtml ( previousItem ) ;
40+ TagBuilder previousPage = CreateTag ( PagingInformation . CurrentPage - 1 , urlHelper , "Previous" ) ;
41+ TagBuilder firstPage = CreateTag ( 1 , urlHelper , "First Page" ) ;
42+ tag . InnerHtml . AppendHtml ( firstPage ) ;
43+ tag . InnerHtml . AppendHtml ( previousPage ) ;
44+ }
45+
46+ if ( PagingInformation . TotalPages <= 6 )
47+ {
48+ CreatePagination ( tag , urlHelper , 1 , PagingInformation . TotalPages ) ;
4449 }
50+ else if ( PagingInformation . TotalPages > 6 )
51+ {
52+ if ( PagingInformation . CurrentPage <= 3 )
53+ CreatePagination ( tag , urlHelper , 1 , 3 ) ;
54+ else if ( PagingInformation . CurrentPage > 3 )
55+ CreatePagination ( tag , urlHelper , PagingInformation . CurrentPage - 3 , PagingInformation . CurrentPage ) ;
56+
57+ int leftPages = PagingInformation . TotalPages - PagingInformation . CurrentPage ;
4558
46- tag . InnerHtml . AppendHtml ( currentItem ) ;
59+ if ( leftPages > 0 && leftPages <= 2 )
60+ CreatePagination ( tag , urlHelper , PagingInformation . CurrentPage + 1 , PagingInformation . CurrentPage + leftPages ) ;
61+ else if ( PagingInformation . CurrentPage <= 3 )
62+ CreatePagination ( tag , urlHelper , PagingInformation . TotalPages - 2 , PagingInformation . TotalPages ) ;
63+ else if ( leftPages > 0 )
64+ CreatePagination ( tag , urlHelper , PagingInformation . CurrentPage + 1 , PagingInformation . CurrentPage + 3 ) ;
65+ }
4766
4867 if ( PagingInformation . HasNextPage )
4968 {
50- TagBuilder nextItem = CreateTag ( PagingInformation . CurrentPage + 1 , urlHelper , "Next" ) ;
51- tag . InnerHtml . AppendHtml ( nextItem ) ;
69+ TagBuilder nextPage = CreateTag ( PagingInformation . CurrentPage + 1 , urlHelper , "Next" ) ;
70+ TagBuilder lastPage = CreateTag ( PagingInformation . TotalPages , urlHelper , "Last Page" ) ;
71+ tag . InnerHtml . AppendHtml ( nextPage ) ;
72+ tag . InnerHtml . AppendHtml ( lastPage ) ;
5273 }
5374
5475 output . Content . AppendHtml ( tag ) ;
5576 }
5677
78+ private void CreatePagination ( TagBuilder tag , IUrlHelper urlHelper , int start , int end )
79+ {
80+ for ( int i = start ; i <= end ; i ++ )
81+ {
82+ TagBuilder current = CreateTag ( i , urlHelper ) ;
83+ tag . InnerHtml . AppendHtml ( current ) ;
84+ }
85+ }
86+
5787 private TagBuilder CreateTag ( int pageNumber , IUrlHelper urlHelper , string title = null )
5888 {
5989 TagBuilder item = new TagBuilder ( "li" ) ;
@@ -67,7 +97,7 @@ private TagBuilder CreateTag(int pageNumber, IUrlHelper urlHelper, string title
6797 item . AddCssClass ( "page-item" ) ;
6898 link . AddCssClass ( "page-link" ) ;
6999
70- link . InnerHtml . Append ( title ?? pageNumber . ToString ( ) ) ;
100+ link . InnerHtml . Append ( title ?? pageNumber . ToString ( ) ) ;
71101 item . InnerHtml . AppendHtml ( link ) ;
72102 return item ;
73103 }
0 commit comments