ASP.NET MVC+Bootstrap個人博客之打造清新分頁Helper(三)

来源:http://www.cnblogs.com/haust/archive/2016/06/26/5617663.html
-Advertisement-
Play Games

0. 沒有找到一款中意的分頁插件,又不想使用現成的(醜到爆),所以自己動手造一個吧 先看下效果(其實也不咋滴...): 我的小站地址:我的Bootstrap小站; PS:(問博客園:為什麼老是刪我的置頂隨便?上一篇閱讀量都快500了,也分分鐘給我從首頁刪掉...真是無語了<博客園地址:http:// ...


 0. 沒有找到一款中意的分頁插件,又不想使用現成的(醜到爆),所以自己動手造一個吧

     先看下效果(其實也不咋滴...):

     我的小站地址:我的Bootstrap小站;

     PS:(問博客園:為什麼老是刪我的置頂隨便?上一篇閱讀量都快500了,也分分鐘給我從首頁刪掉...真是無語了<博客園地址:http://www.cnblogs.com/haust/p/5615946.html> )。

  有點另類,分頁直接是在後臺拼接好html,然後發送到前臺的:

  1. 分頁容器:

<div class="pagination">
    <ul>
       //************分頁HTML*********
    </ul>
</div>

     2.  PagerHelper:

namespace ZYN.BLOG.WebHelper
{
    public class PagerHelper
    {
        /// <summary>
        /// 生成分頁Html數據
        /// </summary>
        /// <param name="currentPage">當前頁</param>
        /// <param name="pageSize">頁容量</param>
        /// <param name="totalCount">數據總條數</param>
        /// <returns>pagerHtmlString</returns>
        public static string GeneratePagerString(int currentPage, int pageSize, int totalCount)
        {
            var redirectToUrl = HttpContext.Current.Request.Url.AbsolutePath;
            pageSize = pageSize <= 0 ? 4 : pageSize;

            //1.0 總頁數
            int totalPages = Math.Max((totalCount + pageSize - 1) / pageSize, 1);

            //2.0 分頁條的容量
            int pageBarSize = 6;//預設一個分頁條顯示6個頁碼。分頁條容量 

            //3.0 分頁條的個數 totalPages個頁數按 pageBarSize = 6  可以 分為多少個分頁條
            int pageBarNum = (totalPages + pageBarSize - 1) / pageBarSize; // totalPages=13時,也就是把13個頁碼分成3個分頁條

            //判斷當前頁currentPage坐落在第幾個分頁條內
            int position = (currentPage - 1) / pageBarSize;  

            //根據分頁條的序號,計算出該分頁條的第一個頁碼start和最後一個頁碼end
            int start = position * pageBarSize + 1;

            //如果是最後一個分頁條,則需判斷它實際的頁條容量;否則頁條容量就是pageBarSize
            int curBarCapacity = pageBarSize;
            if (position == pageBarNum - 1)
            {
                curBarCapacity = totalPages - (pageBarNum - 1) * pageBarSize;
            }

            StringBuilder pagerHtmlString = new StringBuilder();
            StringBuilder endHtmlString = new StringBuilder();

            //處理首頁
            pagerHtmlString.AppendFormat("<li id='start-page'><a href='{0}?pageIndex={1}&pageSize={2}'>首頁</a></li> ", redirectToUrl, 1, pageSize);

            //處理上一頁:如果當前頁不是第一頁,就加上上一頁
            if (currentPage > 1)
            {
                pagerHtmlString.AppendFormat("<li class='prev-page'><a href='{0}?pageIndex={1}&pageSize={2}'>上一頁</a></li> ", redirectToUrl, currentPage - 1, pageSize);
            }

            //假如起始位置start為1  7  13
            for (int i = 0; i < curBarCapacity; i++)  //curBarCapacity=3  i=0 1 2
            {
                int j = start + i; //要顯示的頁碼當量值
                if (j == currentPage)
                {
                    //對當前頁的處理:class=active
                    pagerHtmlString.AppendFormat("<li class='active show-page'><span>{0}</span></li> ", currentPage);

                    if (curBarCapacity == pageBarSize)
                    {
                        //不處理最後一個分頁條頁
                        if (currentPage == start + pageBarSize - 1)
                        {
                            if (currentPage + 1 < totalPages)
                            {
                                endHtmlString.AppendFormat("<li class='show-page'><a href='{0}?pageIndex={1}&pageSize={2}'>{3}</a></li>", redirectToUrl, currentPage + 1, pageSize, currentPage + 1);
                            }
                            endHtmlString.Append("<li class='show-page'><span>...</span></li>");
                            endHtmlString.AppendFormat("<li class='show-page'><a href='{0}?pageIndex={1}&pageSize={2}'>{3}</a></li>", redirectToUrl, totalPages, pageSize, totalPages);
                        }
                    }

                }
                else
                {
                    pagerHtmlString.AppendFormat("<li class='show-page'><a href='{0}?pageIndex={1}&pageSize={2}'>{3}</a></li> ", redirectToUrl, j, pageSize, j);
                }
            }

            //省略號的處理
            pagerHtmlString.Append(endHtmlString.ToString());

            //處理下一頁:如果當前頁不是最後一頁,則加上下一頁。也即中間的所有分頁條都顯示下一頁
            if (currentPage != totalPages)
            {
                pagerHtmlString.AppendFormat("<li class='next-page'><a href='{0}?pageIndex={1}&pageSize={2}'>下一頁</a></li> ", redirectToUrl, currentPage + 1, pageSize);
            }

            //處理末頁
            pagerHtmlString.AppendFormat("<li id='end-page'><a href='{0}?pageIndex={1}&pageSize={2}'>末頁</a></li> ", redirectToUrl, totalPages, pageSize);

            pagerHtmlString.AppendFormat("<li id='total-page'><span>共-{0}-頁</span></li>", totalPages);

            pagerHtmlString.Append(" ");

            return pagerHtmlString.ToString();
        }
    }
}

3 渲染出來的分頁HTML是這樣的:

<div class="pagination">
    <ul>
    <
li id="start-page"><a href="/Home/WrapArtList/0?pageIndex=1&amp;pageSize=6">首頁</a></li>
    <li class="active show-page"><span>1</span></li>
    <li class="show-page"><a href="/Home/WrapArtList/0?pageIndex=2&amp;pageSize=6">2</a></li>
    <li class="show-page"><a href="/Home/WrapArtList/0?pageIndex=3&amp;pageSize=6">3</a></li>
    <li class="show-page"><a href="/Home/WrapArtList/0?pageIndex=4&amp;pageSize=6">4</a></li>
    <
li class="show-page"><a href="/Home/WrapArtList/0?pageIndex=5&amp;pageSize=6">5</a></li>
    <li class="next-page"><a href="/Home/WrapArtList/0?pageIndex=2&amp;pageSize=6">下一頁</a></li>
    <li id="end-page"><a href="/Home/WrapArtList/0?pageIndex=5&amp;pageSize=6">末頁</a></li>
    <li id="total-page"><span>共-5-頁</span></li>
</ul> </div>

4. CSS樣式:

/* 分頁樣式pagination ====== */
.pagination { /* div pagination*/
    margin: 0;
    padding: 20px;
    text-align: center;
    font-size: 12px;
    display: block;
}

    .pagination ul {
        display: inline-block;
        *display: inline;
        *zoom: 1;
        margin-left: 0;
        margin-bottom: 0;
        padding: 0;
    }

        .pagination ul > li {
            display: inline;
        }

            .pagination ul > li > a,
            .pagination ul > li > span {
                margin: 0 2px;
                float: left;
                padding: 5px 12px;
                background-color: #ddd;
                color: #666;
                border-radius: 2px;
                opacity: .88;
            }

                .pagination ul > li > a:hover,
                .pagination ul > li > a:focus {
                    background-color: #bce8f1;
                }

        .pagination ul > .active > a,
        .pagination ul > .active > span {
            background-color: #45B6F7;
            color: #fff;
        }

        .pagination ul > .active > a,
        .pagination ul > .active > span {
            cursor: default;
        }

        .pagination ul > li > span,
        .pagination ul > .disabled > span,
        .pagination ul > .disabled > a,
        .pagination ul > .disabled > a:hover,
        .pagination ul > .disabled > a:focus {
            color: #999999;
            background-color: transparent;
            cursor: default;
        }
/* 自定義的分頁pagination 結束====== */

5. 不嫌棄的話,拿去用吧...

如果有你發現了bug或有疑問、有建議的話,可以去我的小站找我:  去看看? ;  

或者在這篇隨筆下通知我一下,謝謝...

 

 


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

-Advertisement-
Play Games
更多相關文章
  • 以前總結過一遍博文SQL Server刪除distribution資料庫,裡面介紹瞭如何刪除distribution資料庫。今天介紹一個刪除distribution的特殊案例, 在這之前,我不知道這個伺服器上的Replication被如何折騰過,在SSMS管理界面的Local Publication... ...
  • 背水一戰 Windows 10 之 綁定: TemplateBinding 綁定, 與 RelativeSource 綁定, 與 StaticResource 綁定 ...
  • 本寶寶只是一個菜鳥,寫寫學習筆記,以便溫故知新,如果哪裡不對或者不足,望大牛指正。 1.我們先舉個例子說明一下,eg:加減乘除的運算[一步步優化] ⅰ.[第一種寫法] ⅱ.以上的這種寫法,顯得特別不專業,也不美觀,那就優化一下,看看[第二種寫法] ⅲ.以上寫法是不是也有許多不足呢? 業務邏輯層和和客 ...
  • 橋接模式:實現系統可能有多角度分類,每一種分類都有可能的變化,那麼就把這種多角度分離出來讓他們獨立變化,減少它們之間的耦合 下麵的實例是一個手機軟體的實例,對於手機來說,我們可以從手機的品牌進行分類,也可以從軟體角度分類(功能機),同時手機品牌與手機軟體是一個 聚合的關係。 代碼如下: 運行結果: ...
  • ASP.NET MVC5入門基礎,添加一個模型、視圖、控制器,完成增刪改查的功能。 ...
  • 一、前言 上篇運用了.Net Remoting技術解決了本地與伺服器版本對比,並下載更新包的過程。 本篇主要是應用Process,來實現重啟程式的過程。 情景假設: Revit2016正載入某dll,其版本為1.0.0.0。伺服器的更新dll版本為1.0.0.10。 下載完後,Revit2016關閉 ...
  • 寫在前面 在學非同步,有位園友推薦了《async in C#5.0》,沒找到中文版,恰巧也想提高下英文,用我拙劣的英文翻譯一些重要的部分,純屬娛樂,簡單分享,保持學習,謹記謙虛。 如果你覺得這件事兒沒意義翻譯的又差,盡情的踩吧。如果你覺得值得鼓勵,感謝留下你的贊,在今後每一次應該猛烈突破的時候,不選擇 ...
  • 國內知名B2C系統  Urselect 很不錯的asp.net 架構參考與nopCommerce abp等國外開源系統,針對國內定製,採用領域模型設計,不過該系統很適合企業做B2C,品牌電商,商城操作簡單實用,功能也相當強大,是目前.net 系統裡面技術實力較強的後起之秀。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...