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

Un helper de paginación MVC que admite paginación normal y paginación combinada

Es un Helper de paginación que escribí, que admite paginación común (es decir, página inicial, página anterior, página siguiente, página final, etc.) y paginación combinada (combinación de paginación común y paginación numérica).

A continuación es}}Efecto de paginación:

Código de paginación:

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>
 /// Paginación
 /// </summary>
 /// <param name="helper"></<param>
 /// <param name="id">ID de paginación</<param>
 /// <param name="currentPageIndex">Página actual</<param>
 /// <param name="pageSize">Tamaño de página</<param>
 /// <param name="recordCount">Número total de registros</<param>
 /// <param name="htmlAttributes">Atributos de etiquetas de encabezado de paginación</<param>
 /// <param name="className">Estilo de paginación</<param>
 /// <param name="mode">Modo de paginación</<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>
 /// Paginación
 /// </summary>
 /// <param name="helper"></<param>
 /// <param name="id">ID de paginación</<param>
 /// <param name="currentPageIndex">Página actual</<param>
 /// <param name="pageSize">Tamaño de página</<param>
 /// <param name="recordCount">Número total de registros</<param>
 /// <param name="className">Estilo de paginación</<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>
 /// Paginación
 /// </summary>
 /// <param name="helper"></<param>
 /// <param name="id">ID de paginación</<param>
 /// <param name="currentPageIndex">Página actual</<param>
 /// <param name="pageSize">Tamaño de página</<param>
 /// <param name="recordCount">Número total de registros</<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>
 /// Paginación
 /// </summary>
 /// <param name="helper"></<param>
 /// <param name="id">ID de paginación</<param>
 /// <param name="currentPageIndex">Página actual</<param>
 /// <param name="pageSize">Tamaño de página</<param>
 /// <param name="recordCount">Número total de registros</<param>
 /// <param name="mode">Modo de paginación</<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>
 /// Paginación
 /// </summary>
 /// <param name="helper"></<param>
 /// <param name="id">ID de paginación</<param>
 /// <param name="currentPageIndex">Página actual</<param>
 /// <param name="pageSize">Tamaño de página</<param>
 /// <param name="recordCount">Número total de registros</<param>
 /// <param name="className">Estilo de paginación</<param>
 /// <param name="mode">Modo de paginación</<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>
 /// Obtener paginación normal
 /// </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("total {0} registros, en total de {1} página, página actual {2} página  ", recordCount, pageCount, currentPageIndex);
  if (currentPageIndex == 1)
  sb.Append("<span>primera página</span> ");
  else
  {
  string url1 = string.Format(url.ToString(), 1);
  sb.AppendFormat("<span><a href={0}>primera página</a></span> ", url1);
  }
  if (currentPageIndex > 1)
  {
  string url1 = string.Format(url.ToString(), currentPageIndex - 1);
  sb.AppendFormat("<span><a href={0}>anterior página</a></span> ", url1);
  }
  else
  sb.Append("<span>anterior página</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}>siguiente página</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>
 /// Modo de paginación normal
 /// </summary>
 Normal,
 /// <summary>
 /// Páginas numeradas y pags con números
 /// </summary>
 Numeric
 }
} 

PagerQuery.cs contiene dos propiedades, una es la propiedad de la clase de entidad PageInfo, que contiene las propiedades RecordCount, CurrentPageIndex, PageSize. La otra es la propiedad 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);
 }

Descarga de código fuente:http://xiazai.jb51.net/201609/yuanma/MvcPager(jb51.net).rar

Esto es todo el contenido de este artículo, esperamos que haya sido útil para su aprendizaje y que todos apoyen el tutorial de alarido.

Aclaración: Este contenido se ha obtenido de la red, pertenece al autor original, se ha contribuido y subido por los usuarios de Internet, este sitio web no posee los derechos de propiedad, no ha sido editado por humanos ni asume responsabilidades legales relacionadas. Si encuentra contenido sospechoso de infracción de derechos de autor, le invitamos a enviar un correo electrónico a: notice#w3Declaración: El contenido de este artículo se obtiene de la red, es propiedad del autor original, el contenido se contribuye y sube por los usuarios de Internet, este sitio web no posee los derechos de propiedad, no se ha procesado editorialmente por humanos ni asume responsabilidades legales relacionadas. Si encuentra contenido sospechoso de infracción de derechos de autor, le invitamos a enviar un correo electrónico a: notice#w

Te gustaría que te recomendemos