軟件開發分頁效果必不可少,對於Asp.Net MVC 而言,MvcPager 是個不錯的選擇。請訪問http://www.webdiyer.com/mvcpager/html
因爲自帶的分頁樣式不能和項目總體風格兼容,因此咱們準備改寫源代碼,使其可以使用Bootstrap 的分頁樣式。web
先來查看兩種分頁的html代碼ajax
Bootstrap 樣式:mvc
1 <ul class="pagination"> 2 <li class="disabled"><a href="#">«</a></li> 3 <li class="active"><a href="#">1 <span class="sr-only">(current)</span></a></li> 4 ... 5 </ul>
一個ul標籤,li 下面有一個a 標籤.ui
MvcPager 樣式:url
1 <!--MvcPager v2.0 for ASP.NET MVC 4.0+ © 2009-2013 Webdiyer (http://www.webdiyer.com)--> 2 <div data-maxpages="5" data-mvcpager="true" data-pageparameter="id" data-urlformat="/mvcpager/demo/basic/__id__/"><a disabled="disabled">首頁</a> <a disabled="disabled">上一頁</a> 1 <a href="/mvcpager/demo/basic/2/">2</a> <a href="/mvcpager/demo/basic/3/">3</a> <a href="/mvcpager/demo/basic/4/">4</a> <a href="/mvcpager/demo/basic/5/">5</a> <a href="/mvcpager/demo/basic/2/">下一頁</a> <a href="/mvcpager/demo/basic/5/">尾頁</a> <select data-pageindexbox="true" data-autosubmit="true"><option value="1" selected="selected">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option></select></div> 3 <!--MvcPager v2.0 for ASP.NET MVC 4.0+ © 2009-2013 Webdiyer (http://www.webdiyer.com)-->
這裏就比較簡單了,一個div 下只有a 標籤.spa
那麼問題來了,咱們該怎麼修改源碼來達到Bootstrap 分頁效果呢?調試
一、到官網下載MvcPager 源代碼code
二、開始研究html 生成規則.orm
這兩步筆者已經幫你作了,下面跟我一塊兒來作修改.
經過代碼調試跟蹤和查看源碼註釋,咱們知道了最終的HTML 呈現是在PagerBuilder.cs 下的RenderPager() 方法.
1 var sb = new StringBuilder(); 2 if (_ajaxPagingEnabled) 3 { 4 foreach (PagerItem item in pagerItems) 5 { 6 //修改前 7 //sb.Append( GenerateAjaxPagerElement(item) ); 8 //修改後 9 sb.Append("<li>" + GenerateAjaxPagerElement(item) + "</li>"); 10 } 11 } 12 else 13 { 14 foreach (PagerItem item in pagerItems) 15 { 16 //修改前 17 //sb.Append( GeneratePagerElement(item) ); 18 //修改後 19 sb.Append("<li>" + GeneratePagerElement(item) + "</li>"); 20 } 21 }
修改以上代碼以得到li標籤。因爲ul標籤是最後加上去的因此咱們在這裏修改:
1 if (_pagerOptions.ShowPageIndexBox) 2 { 3 if (!_ajaxPagingEnabled) 4 { 5 var attrs = new Dictionary<string, object>(); 6 AddDataAttributes(attrs); 7 tb.MergeAttributes(attrs, true); 8 } 9 sb.Append(BuildGoToPageSection()); 10 } 11 else 12 sb.Length -= _pagerOptions.PagerItemsSeperator.Length; 13 //修改前 14 // tb.InnerHtml = sb.ToString() ; 15 //修改後,爲ul加上class='pagination'以得到boostrap 分頁樣式 16 tb.InnerHtml = "<ul class='pagination'>" + sb.ToString() + "</ul>";
有了以上還不行,還須要爲當前頁增長樣式,
修改後的GenerateAjaxAnchor(PagerItem item) 方法爲:
1 } 2 private string GenerateAjaxAnchor(PagerItem item) 3 { 4 string url = GenerateUrl(item.PageIndex); 5 if (string.IsNullOrWhiteSpace(url)) 6 //這裏直接假的行內樣式,能夠使用class替換掉 7 return "<a style='z-index:2;color:#fff; cursor: default;background-color: #428bca; border-color: #428bca;' disabled='disabled'>" + item.Text + "</a>"; 8 //return HttpUtility.HtmlEncode(item.Text); 9 var tag = new TagBuilder("a") { InnerHtml = item.Text }; 10 tag.MergeAttribute("href", url); 11 tag.MergeAttribute("data-pageindex", item.PageIndex.ToString(CultureInfo.InvariantCulture)); 12 //修改後,添加了li標籤 13 return "<li>" + tag.ToString(TagRenderMode.Normal) + "</li>"; 14 }
對源代碼的修改就是這麼多了,咱們一塊兒看看效果.
中文版效果:
英文版效果(一樣是修改源碼,增長了對英文的支持):
代碼點擊這裏下載