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">معرف الصفحة</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>
 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">معرف الصفحة</param>
 /// <param name="currentPageIndex">الصفحة الحالية</param>
 /// <param name="pageSize">حجم الصفحة</param>
 /// <param name="recordCount">عدد السجلات</param>
 /// <param name="className">نمط الصفحة</param>
 /// <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">معرف الصفحة</param>
 /// <param name="currentPageIndex">الصفحة الحالية</param>
 /// <param name="pageSize">حجم الصفحة</param>
 /// <param name="recordCount">عدد السجلات</param>
 /// <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">معرف الصفحة</param>
 /// <param name="currentPageIndex">الصفحة الحالية</param>
 /// <param name="pageSize">حجم الصفحة</param>
 /// <param name="recordCount">عدد السجلات</param>
 /// <param name="mode">نمط الصفحة</param>
 /// <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">معرف الصفحة</param>
 /// <param name="currentPageIndex">الصفحة الحالية</param>
 /// <param name="pageSize">حجم الصفحة</param>
 /// <param name="recordCount">عدد السجلات</param>
 /// <param name="className">نمط الصفحة</param>
 /// <param name="mode">نمط الصفحة</param>
 /// <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>
 private static string GetNormalPage(int currentPageIndex, int pageSize, int recordCount,PageMode mode)
 {
  int pageCount = (recordCount%pageSize ==0?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>
 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 يحتوي على خصائصين، الأولى هي صفة Pager الكائن في PageInfo، تحتوي على 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>قائمةالاخبار</h2>
 <table>
 <tr>
  <th></th>
  <th>
  رقمالملاحظة
  </th>
  <th>
  العنوان
  </th>
  <th>
  المؤلف
  </th>
  <th>
  الزيارات
  </th>
  <th>
  عددالردود
  </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 = حل<INewsBLL>().حصولعلىقائمةبياناتالمقالات(info, نوعالمقالة.الموافقة);
  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://xiazai.jb51.net/201609/yuanma/MvcPager(jb51.net).rar

هذا هو نهاية محتوى هذا المقال، نأمل أن يكون قد ساعدكم في التعلم، ونأمل أن تحصلوا على دعمكم وتشجيعكم لتدريب呐喊.

البيان: محتويات هذا المقال تم جمعها من الإنترنت، حقوق الطبع والنشر مملوكة للمالك الأصلي، تم جمع المحتوى من قبل المستخدمين عبر الإنترنت بشكل تلقائي، لا يمتلك هذا الموقع حقوق الملكية، لم يتم تعديل المحتوى بشكل يدوي، ولا يتحمل هذا الموقع أي مسؤولية قانونية. إذا وجدت محتوى يشتبه في انتهاك حقوق الطبع والنشر، يرجى إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال # بـ @) لإبلاغنا، وقدم الدليل الداعم، إذا تم التحقق من ذلك، سيتم حذف المحتوى المشبوه فوراً.

سيحبك