English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

일반 및 종합 페이지네이션을 지원하는 MVC 페이지네이션 헬퍼

저가 작성한 페이지 헬퍼는 일반 페이징(즉, 첫 페이지, 이전 페이지, 다음 페이지, 마지막 페이지 등)과 종합 페이징(일반 페이징과 숫자 페이징의 종합)을 지원합니다.

아래는}}페이지네이션 효과:

페이지네이션 코드:

PagerHelper.cs

using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Web;
using System.Text;
using System.Web.Mvc;
using System.Web.Routing;
using System.Data.Objects.DataClasses;
namespace System.Web.Mvc
{
 public static class PagerHelper
 {
 /// <summary>
 /// 페이지
 /// </summary>
 /// <param name="helper"></param>
 /// <param name="id">페이지 id</param>
 /// <param name="currentPageIndex">현재 페이지</param>
 /// <param name="pageSize">페이지 크기</param>
 /// <param name="recordCount">총 기록 수</param>
 /// <param name="htmlAttributes">페이지 헤더 태그 속성</param>
 /// <param name="className">페이지 스타일</param>
 /// <param name="mode">페이지 모드</param>
 /// <returns></returns>
 public static string Pager(this HtmlHelper helper, string id, int currentPageIndex, int pageSize, int recordCount, object htmlAttributes, string className, PageMode mode)
 {
  TagBuilder builder = new TagBuilder("table");
  builder.IdAttributeDotReplacement = "_";
  builder.GenerateId(id);
  builder.AddCssClass(className);
  builder.MergeAttributes(new RouteValueDictionary(htmlAttributes));
  builder.InnerHtml = GetNormalPage(currentPageIndex, pageSize, recordCount, mode);
  return builder.ToString();
 }
 /// <summary>
 /// 페이지
 /// </summary>
 /// <param name="helper"></param>
 /// <param name="id">페이지 id</param>
 /// <param name="currentPageIndex">현재 페이지</param>
 /// <param name="pageSize">페이지 크기</param>
 /// <param name="recordCount">총 기록 수</param>
 /// <param name="className">페이지 스타일</param>
 /// <returns></returns>
 public static string Pager(this HtmlHelper helper, string id, int currentPageIndex, int pageSize, int recordCount, string className)
 {
  return Pager(helper, id, currentPageIndex, pageSize, recordCount, null, className, PageMode.Normal);
 }
 /// <summary>
 /// 페이지
 /// </summary>
 /// <param name="helper"></param>
 /// <param name="id">페이지 id</param>
 /// <param name="currentPageIndex">현재 페이지</param>
 /// <param name="pageSize">페이지 크기</param>
 /// <param name="recordCount">총 기록 수</param>
 /// <returns></returns>
 public static string Pager(this HtmlHelper helper,string id,int currentPageIndex,int pageSize,int recordCount)
 {
  return Pager(helper, id, currentPageIndex, pageSize, recordCount, null);
 }
 /// <summary>
 /// 페이지
 /// </summary>
 /// <param name="helper"></param>
 /// <param name="id">페이지 id</param>
 /// <param name="currentPageIndex">현재 페이지</param>
 /// <param name="pageSize">페이지 크기</param>
 /// <param name="recordCount">총 기록 수</param>
 /// <param name="mode">페이지 모드</param>
 /// <returns></returns>
 public static string Pager(this HtmlHelper helper, string id, int currentPageIndex, int pageSize, int recordCount,PageMode mode)
 {
  return Pager(helper, id, currentPageIndex, pageSize, recordCount, null,mode);
 }
 /// <summary>
 /// 페이지
 /// </summary>
 /// <param name="helper"></param>
 /// <param name="id">페이지 id</param>
 /// <param name="currentPageIndex">현재 페이지</param>
 /// <param name="pageSize">페이지 크기</param>
 /// <param name="recordCount">총 기록 수</param>
 /// <param name="className">페이지 스타일</param>
 /// <param name="mode">페이지 모드</param>
 /// <returns></returns>
 public static string Pager(this HtmlHelper helper, string id, int currentPageIndex, int pageSize, int recordCount,string className, PageMode mode)
 {
  return Pager(helper, id, currentPageIndex, pageSize, recordCount, null,className,mode);
 }
 /// <summary>
 /// 정보 일반 페이지 획득
 /// </summary>
 /// <param name="currentPageIndex"></param>
 /// <param name="pageSize"></param>
 /// <param name="recordCount"></param>
 /// <returns></returns>
 private static string GetNormalPage(int currentPageIndex, int pageSize, int recordCount,PageMode mode)
 {
  int pageCount = (recordCount%pageSize == 0)63;recordCount/pageSize:recordCount/pageSize+1);
  StringBuilder url = new StringBuilder();
  url.Append(HttpContext.Current.Request.Url.AbsolutePath+"?page={0}");
  NameValueCollection collection = HttpContext.Current.Request.QueryString;
  string[] keys = collection.AllKeys;
  for (int i = 0; i < keys.Length; i++)
  {
  if (keys[i].ToLower() != "page")
   url.AppendFormat("&{0}={");1}", keys[i], collection[keys[i]]);
  }
  StringBuilder sb = new StringBuilder();
  sb.Append("<tr><td>");
  sb.AppendFormat("총{0}개의 기록, 총{1}페이지, 현재 페이지 {2}페이지  ", recordCount, pageCount, currentPageIndex);
  if (currentPageIndex == 1)
  sb.Append("<span>처음 페이지<");/span> ");
  else
  {
  string url1 = string.Format(url.ToString(), 1);
  sb.AppendFormat("<span><a href={0}>처음 페이지<");/a></span> ", url1);
  }
  if (currentPageIndex > 1)
  {
  string url1 = string.Format(url.ToString(), currentPageIndex - 1);
  sb.AppendFormat("<span><a href={0}>이전 페이지<");/a></span> ", url1);
  }
  else
  sb.Append("<span>이전 페이지<");/span> ");
  if(mode == PageMode.Numeric)
  sb.Append(GetNumericPage(currentPageIndex, pageSize, recordCount, pageCount, url.ToString()));
  if (currentPageIndex < pageCount)
  {
  string url1 = string.Format(url.ToString(), currentPageIndex+1);
  sb.AppendFormat("<span><a href={0}>다음 페이지<");/a></span> ", url1);
  }
  else
  sb.Append("<span>다음 페이지</span> ");
  if (currentPageIndex == pageCount)
  sb.Append("<span>마지막 페이지</span> ");
  else
  {
  string url1 = string.Format(url.ToString(), pageCount);
  sb.AppendFormat("<span><a href={0}>마지막 페이지</a></span> ", url1);
  }
  return sb.ToString();
 }
 /// <summary>
 /// 数字 페이지 가져오기
 /// </summary>
 /// <param name="currentPageIndex"></param>
 /// <param name="pageSize"></param>
 /// <param name="recordCount"></param>
 /// <param name="pageCount"></param>
 /// <param name="url"></param>
 /// <returns></returns>
 private static string GetNumericPage(int currentPageIndex, int pageSize, int recordCount, int pageCount,string url)
 {
  int k = currentPageIndex / 10;
  int m = currentPageIndex % 10;
  StringBuilder sb = new StringBuilder();
  if (currentPageIndex / 10 == pageCount / 10)
  {
  if (m == 0)
  {
   k--;
   m = 10;
  }
  else
   m = pageCount%10;
  }
  else
  m = 10;
  for (int i = k * 10 + 1; i <= k * 10 + m; i++)
  {
  if (i == currentPageIndex)
   sb.AppendFormat("<span><font color=red><b>{0}</b></font></span> ", i);
  else
  {
   string url1 = string.Format(url.ToString(), i);
   sb.AppendFormat("<span><a href={0}>"1}</a></span> ",url1, i);
  }
  }
  return sb.ToString();
 }
 }
 /// <summary>
 /// 페이지 모드
 /// </summary>
 public enum PageMode
 {
 /// <summary>
 /// 일반 분페이지 모드
 /// </summary>
 Normal,
 /// <summary>
 /// 일반 분페이지와 숫자 분페이지
 /// </summary>
 Numeric
 }
} 

PagerQuery.cs에 포함된 두 개의 속성이 있습니다. 하나는 PageInfo 엔티티 클래스 속성 Pager입니다. 이 속성은 RecordCount, CurrentPageIndex, PageSize 세 개의 속성을 포함합니다. 다른 하나는 Model EntityList 속성입니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace System.Web.Mvc
{
 public class PagerQuery<TPager,TEntityList>
 {
 public PagerQuery(TPager pager, TEntityList entityList)
 {
  this.Pager = pager;
  this.EntityList = entityList;
 }
 public TPager Pager { get; set; }
 public TEntityList EntityList { get; set; } 
 }
}

PageInfo.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace System.Web.Mvc
{
 public class PagerInfo
 {
 public int RecordCount { get; set; }
 public int CurrentPageIndex { get; set; }
 public int PageSize { get; set; }
 }
}

사용 예제:

@ Page Title="" Language="C#" MasterPageFile="~"/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<PagerQuery<PagerInfo, IList<NewsArticleInfo>>>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
 NewsList
</asp:Content>
<asp:Content ID="Content2"ContentPlaceHolderID="MainContent" runat="server">
 <h2>NewsList</h2>
 <table>
 <tr>
  <th></th>
  th>
  NoteID
  </th>
  th>
  Title
  </th>
  th>
  Author
  </th>
  th>
  Hit
  </th>
  th>
  ReplyNum
  </th>
 </tr>
 <% foreach (var item in Model.EntityList) { %>
 <tr>
  <td>
  <%= Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) %> |
  <%= Html.ActionLink("Details", "NewsDetail", new { noteID=item.NoteID })%>
  </td>
  <td>
  <%= Html.Encode(item.NoteID) %>
  </td>
  <td>
  <%= Html.Encode(item.Title) %>
  </td>
  <td>
  <%= Html.Encode(item.Author)%>
  </td>
  <td>
  <%= Html.Encode(item.Hit)%>
  </td>
  <td>
  <%= Html.Encode(item.ReplyNum)%>
  </td>
 </tr>
 <% } %>
 </table>
 <p>
 <%=Html.Pager("pager",Model.Pager.CurrentPageIndex,Model.Pager.PageSize,Model.Pager.RecordCount,PageMode.Numeric) %>
 </p>
</asp:Content>

 controler:

[AcceptVerbs(HttpVerbs.Get)]
 public ActionResult NewsList(int boardID, int? page)
 {
  PagerInfo pager = new PagerInfo();
  NewsArticleInfo info = new NewsArticleInfo();
  info.NewsBoard = new NewsBoardInfo();
  info.NewsBoard.BoardID = boardID;
  pager.RecordCount = Resolve<INewsBLL>().GetArticleDataList(info, ArticleTypeEnum.Pass);
  pager.PageSize = 10;
  pager.CurrentPageIndex = (page!=null?;(int)page:1);
  IList<NewsArticleInfo> result = Resolve<INewsBLL>().GetArticleDataList(pager.CurrentPageIndex, pager.PageSize, ArticleTypeEnum.Pass, info);
  PagerQuery<PagerInfo, IList<NewsArticleInfo>> query = new PagerQuery<PagerInfo, IList<NewsArticleInfo>>(pager,result);
  return View(query);
 }

원码下载:http://하자이.jb51.net/201609/원마/MvcPager(jb51.net).rar

이것이 본문의 전체 내용입니다. 많은 도움이 되었기를 바랍니다. 또한, 노래教程에 많은 지지를 해 주시기 바랍니다.

고지사항: 본문의 내용은 인터넷에서 수집되었으며, 저작권은 원저자에게 있으며, 인터넷 사용자가 자발적으로 기여하고 업로드한 내용입니다. 이 사이트는 소유권을 가지지 않으며, 인공적인 편집을 하지 않았으며, 관련 법적 책임도 부담하지 않습니다. 저작권 문제가 의심되는 내용을 발견하면 notice#w로 이메일을 보내 주시기 바랍니다.3codebox.com에 이메일을 보내면(#을 @으로 변경해 주세요) 신고를 해 주시고 관련 증거를 제공해 주시면, 사실이 확인되면 이 사이트는 즉시 의심스러운 저작권 내용을 삭제할 것입니다.

당신이 좋아할 만한 것