37.5.7 따라하기 6: 이미 구현 완료된 페이징 처리를 위한 태그 헬퍼 확인
1. DotNetNote 프로젝트의 TagHelpers 폴더에는 이미 DnnPaginHelperTaghelper.cs 파일이 있다. 이는 게시판의 리스트 페이지에서 사용할 페이징 처리 컨트롤을 의미한다. 웹 폼 방식에서 따로 페이저를 구현했던 AdvancedPagingSingleWithBootstrap.ascx 파일과 같은 기능을 ASP.NET Core 1.0의 태그 헬퍼로 표현한 것이다. 이전 10개 및 다음 10개에 대한 페이징 처리를 위한 코드는 HTML 영역에서 직접 작업해도 되지만, 이처럼 태그 헬퍼로 따로 구현하고 이를 포함시켜서 사용하는 것도 또 하나의 방법이다. 만약 새롭게 프로젝트를 생성 후 게시판 프로젝트를 진행한다면 다음 코드가 구현되어 있어야 한다.
▼ /TagHelpers/DnnPagingHelperTagHelper.cs
using Microsoft.AspNetCore.Razor.TagHelpers;
using System;
namespace DotNetNote.TagHelpers
{
/// <summary>
/// 페이징 헬퍼(dnn-paging-helper)
/// </summary>
public class DnnPagingHelperTagHelper : TagHelper
{
/// <summary>
/// 기본 리스트면 false, 검색 결과에 대한 페이징 리스트면 true
/// </summary>
public bool SearchMode { get; set; } = false;
/// <summary>
/// 검색할 필드: Name, Title, Content
/// </summary>
public string SearchField { get; set; }
/// <summary>
/// 검색할 내용
/// </summary>
public string SearchQuery { get; set; }
/// <summary>
/// 현재 보여줄 페이지 인덱스: 0, 1, 2
/// </summary>
public int PageIndex { get; set; } = 0;
/// <summary>
/// 총 페이지 개수
/// </summary>
public int PageCount { get; set; }
/// <summary>
/// 한 페이지에 보여줄 아티클 개수
/// </summary>
public int PageSize { get; set; } = 10;
/// <summary>
/// 페이징 헬퍼가 실행될 URL
/// </summary>
public string Url { get; set; }
private int _RecordCount;
/// <summary>
/// 총 레코드 수
/// </summary>
public int RecordCount
{
get { return _RecordCount; }
set
{
_RecordCount = value;
PageCount = ((_RecordCount - 1) / PageSize) + 1; // 계산식
}
}
public override void Process(
TagHelperContext context, TagHelperOutput output)
{
output.TagName = “ul”;
output.Attributes.Add(“class”, “pagination pagination-sm”);
if (PageIndex == 0)
{
PageIndex = 1;
}
int i = 0;
string strPage = ””;
if (PageIndex > 10)
{
if (!SearchMode)
{
strPage += “<li><a href=\“” + Url + ”?Page=”
+ Convert.ToString(((PageIndex - 1) / (int)10) 10)
+ “\”>◀</a></li>“;
}
else
{
strPage += “<li><a href=\“” + Url + ”?Page=”
+ Convert.ToString(((PageIndex - 1) / (int)10)