MVC預設路由實現分頁-PagerExtend.dll

来源:http://www.cnblogs.com/wangrudong003/archive/2016/06/22/5607743.html
-Advertisement-
Play Games

這兩天在群里有人咨詢有沒有現成的.net mvc分頁方法,由此寫了一個簡單分頁工具,這裡簡單分享下實現思路,代碼,希望能對大家有些幫助,鼓勵大家多造些輪子還是好的。 A.效果(這裡用了bootstrap的樣式) B.分析,知識點 a.分頁通常由一下幾個屬性組成(當前頁,總條數,分頁記錄數,路由地址) ...


這兩天在群里有人咨詢有沒有現成的.net mvc分頁方法,由此寫了一個簡單分頁工具,這裡簡單分享下實現思路,代碼,希望能對大家有些幫助,鼓勵大家多造些輪子還是好的。

A.效果(這裡用了bootstrap的樣式)

B.分析,知識點

  a.分頁通常由一下幾個屬性組成(當前頁,總條數,分頁記錄數,路由地址),由此四項基本就能實現分頁了,在加上一個控制樣式的參數

  b.各種數字的驗證,計算總頁數(如果總條數和分頁記錄數不能整除,那麼最後相除的結果再+1)

  c.下一頁和上一下的按鈕是零界點,需要判斷是否是最後一頁或者第一頁來顯示當前頁數的繼續增加或者減小

  d.因為需要在cshtml文件中展示分頁的效果,所以需要用到HtmlHelper擴展方法;擴展方法這裡簡單說下註意項:

    .關鍵詞this

    .擴展方法對應的clas必須靜態,該方法本身也是靜態

    .擴展方法對應的class尾碼一般是Extensions修飾

  e.試圖頁面@Html.PageExtend直接調用分頁方法

C.代碼展示

  a.分頁方法實現類

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Threading.Tasks;
  6 using System.Web.Mvc;
  7 
  8 namespace PagerExtend
  9 {
 10     public static class HtmlHelperExtensions
 11     {
 12 
 13         #region 分頁擴展 PageExtend
 14 
 15         /// <summary>
 16         /// 分頁option屬性
 17         /// </summary>
 18         public class MoPagerOption
 19         {
 20             /// <summary>
 21             /// 當前頁  必傳
 22             /// </summary>
 23             public int CurrentPage { get; set; }
 24             /// <summary>
 25             /// 總條數  必傳
 26             /// </summary>
 27             public int Total { get; set; }
 28 
 29             /// <summary>
 30             /// 分頁記錄數(每頁條數 預設每頁15條)
 31             /// </summary>
 32             public int PageSize { get; set; }
 33 
 34             /// <summary>
 35             /// 路由地址(格式如:/Controller/Action) 預設自動獲取
 36             /// </summary>
 37             public string RouteUrl { get; set; }
 38 
 39             /// <summary>
 40             /// 樣式 預設 bootstrap樣式 1
 41             /// </summary>
 42             public int StyleNum { get; set; }
 43         }
 44 
 45         /// <summary>
 46         /// 分頁擴展方法
 47         /// </summary>
 48         /// <param name="helper">html試圖</param>
 49         /// <param name="option">分頁屬性</param>
 50         /// <returns>html樣式</returns>
 51         public static MvcHtmlString PageExtend(this HtmlHelper helper, MoPagerOption option)
 52         {
 53 
 54             if (option.PageSize <= 0) { option.PageSize = 15; }
 55             if (option.CurrentPage <= 0) { option.CurrentPage = 1; }
 56             if (option.Total <= 0) { return MvcHtmlString.Empty; }
 57 
 58             //總頁數
 59             var totalPage = option.Total / option.PageSize + (option.Total % option.PageSize > 0 ? 1 : 0);
 60             if (totalPage <= 0) { return MvcHtmlString.Create("分頁異常"); }
 61             //當前路由地址
 62             if (string.IsNullOrEmpty(option.RouteUrl))
 63             {
 64 
 65                 option.RouteUrl = helper.ViewContext.HttpContext.Request.RawUrl;
 66                 if (!string.IsNullOrEmpty(option.RouteUrl))
 67                 {
 68 
 69                     var lastIndex = option.RouteUrl.LastIndexOf("/");
 70                     option.RouteUrl = option.RouteUrl.Substring(0, lastIndex);
 71                 }
 72             }
 73             option.RouteUrl = option.RouteUrl.TrimEnd('/');
 74 
 75             //構造分頁樣式
 76             var sbPage = new StringBuilder(string.Empty);
 77             switch (option.StyleNum)
 78             {
 79                 case 2:
 80                     {
 81                         break;
 82                     }
 83                 default:
 84                     {
 85                         #region 預設樣式
 86 
 87                         sbPage.Append("<nav>");
 88                         sbPage.Append("  <ul class=\"pagination\">");
 89                         sbPage.AppendFormat("       <li><a href=\"{0}/{1}\" aria-label=\"Previous\"><span aria-hidden=\"true\">&laquo;</span></a></li>",
 90                                                 option.RouteUrl,
 91                                                 option.CurrentPage - 1 <= 0 ? 1 : option.CurrentPage - 1);
 92 
 93                         for (int i = 1; i <= totalPage; i++)
 94                         {
 95 
 96                             sbPage.AppendFormat("       <li {1}><a href=\"{2}/{0}\">{0}</a></li>",
 97                                 i,
 98                                 i == option.CurrentPage ? "class=\"active\"" : "",
 99                                 option.RouteUrl);
100 
101                         }
102 
103                         sbPage.Append("       <li>");
104                         sbPage.AppendFormat("         <a href=\"{0}/{1}\" aria-label=\"Next\">",
105                                             option.RouteUrl,
106                                             option.CurrentPage + 1 > totalPage ? option.CurrentPage : option.CurrentPage + 1);
107                         sbPage.Append("               <span aria-hidden=\"true\">&raquo;</span>");
108                         sbPage.Append("         </a>");
109                         sbPage.Append("       </li>");
110                         sbPage.Append("   </ul>");
111                         sbPage.Append("</nav>");
112                         #endregion
113                     }
114                     break;
115             }
116 
117 
118             return MvcHtmlString.Create(sbPage.ToString());
119         }
120         #endregion
121     }
122 }
View Code

    b.View測試調用

 1 @using PagerExtend
 2 @model IEnumerable<XinSheng.Api.Controllers.MoAirticle>
 3 
 4 <table>
 5     Url:@ViewBag.Url
 6 
 7     @foreach (var item in Model)
 8     {
 9         <tr>
10             <td>@item.Title</td>
11             <td>@item.Author</td>
12             <td>@item.CreateTime</td>
13         </tr>
14     }
15 </table>
16 
17 @Html.PageExtend(ViewBag.PagerOption as HtmlHelperExtensions.MoPagerOption)
View Code

    c.Controller測試

 1 using PagerExtend;
 2 using System;
 3 using System.Collections.Generic;
 4 using System.Linq;
 5 using System.Web;
 6 using System.Web.Mvc;
 7 using System.Web.Security;
 8 
 9 namespace XinSheng.Api.Controllers
10 {
11 
12     [Serializable]
13     public class MoAirticle
14     {
15 
16         public string Title { get; set; }
17         public string Author { get; set; }
18         public DateTime CreateTime { get; set; }
19     }
20 
21     public class HomeController : Controller
22     {
23 
24         public ActionResult Index(int id)
25         {
26             ViewBag.Title = "測試 分頁";
27 
28             List<MoAirticle> moAirticles = new List<MoAirticle>();
29 
30             for (int i = 1; i < 50; i++)
31             {
32 
33                 moAirticles.Add(new MoAirticle
34                 {
35                     Author = "神牛步行" + i,
36                     CreateTime = DateTime.Now,
37                     Title = "博客園之" + i
38                 });
39             }
40             ViewBag.Url = Request.RawUrl;
41 
42             //初始化分頁基礎信息
43             var option = new HtmlHelperExtensions.MoPagerOption
44            {
45 
46                CurrentPage = id,
47                PageSize = 15,
48                Total = moAirticles.Count
49            };
50             //動態傳遞分頁屬性
51             ViewBag.PagerOption = option;
52 
53             var articles = moAirticles.Skip((option.CurrentPage - 1) * option.PageSize).Take(option.PageSize).ToList();
54             return View(articles);
55         }
56     }
57 }
View Code

  D.分頁PagerExtend.dll下載地址

  PagerExtend.rar

  

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 分類:C#、VS2015 創建日期:2016-06-23 使用教材:(十二五國家級規劃教材)《C#程式設計及應用教程》(第3版) 一、要點 該例子屬於高級技術中的基本用法。對於初學者來說這是難點(難在還沒有學習第13章WPF相關的繪圖技術),因此,這裡的關鍵是理解設計思路,而不是一開始就陷於細節的實... ...
  • 晚上無聊寫了個二叉樹(圖)的廣度和深度遍歷演算法,演算法本身很簡單,但是如何做到通用呢,一下代碼是我的設計,請大家幫忙看看有什麼問題,我自己感覺有問題就是不知道具體什麼問題 單元測試代碼: [TestClass] public class BreadthVisitorTest { [TestMethod ...
  • 寫代碼出身的我們經常需要使用一些簡單 但是不是規則圖形的Path 但限於美工功底有限 不知道怎麼去畫 下麵我告訴大家一些簡單的小技巧 用代碼來畫Path 個人還是比較喜歡用代碼 因為數值控制的更精細 MSDN告訴我們,Path可以用這些形狀繪製: ArcSegment 類 表示兩點之間的一條橢圓弧。 ...
  • 1.結構體裡面是否可以有屬性? 可以有屬性。實測代碼以及截圖。 In C#, we can use the following statement to convert a string s to an integer num 124 A.int num = Convert.ToInt32(s); ...
  • 幫同學搞個課程設計winform連接sqlserver2005 具體方法: .添加App.config文件 2.在App.config文件中添加節點 3.在項目Reference中添加引用 System.configuration 在文件中 添加引用 using System.configurati ...
  • ...
  • 迴圈:反覆執行某段代碼。 迴圈四要素:初始條件,迴圈條件,迴圈體,狀態改變。 for(初始條件;迴圈條件;狀態改變) { 迴圈體 } break ——中斷迴圈,跳出整個迴圈 continue——停止本次迴圈,進入下次迴圈。 註:●執行步驟:初始條件——迴圈條件——迴圈體——狀態改變。 ●死迴圈:出不 ...
  • 博問裡面發了幾次了,看的人太少了,回答的人更少,而且都沒有解決,這次發首頁,希望管理手下留情,真心這個問題一個月了,一直沒解決掉。高抬貴手 項目生成成功後,右鍵.tt文件,然後 ,然後調試T4模板成功,就OK瞭然而每次運行自定義工具,就會報錯,應該是Machine config的錯誤,但是一直不會改 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...