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) 

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.