在前一篇博客中使用正則表達式抓取博客園列表數據,我通過正則表達式抓取了博客園的部分數據作為測試數據,現在測試數據也有了,就應該進行數據的分頁顯示了。
但是如何分頁這倒是讓我猶豫了好幾分鍾,是自己寫javascript來自定義分頁顯示,還是通過現成的控件來進行分頁,通過自定義分頁可以完全的對分頁進行控制,但是會很耗費時間,這對於js功能很差的我就是個難題,但是為了盡快的能實現這個分頁功能,我依然采用了分頁控件進行分頁,如果以后有機會我再手動寫一個分頁js來進行分頁。
因為我使用的是MVC 3 Razor引擎,所以我找了一個我在web form時代使用的aspNetPager同一個作者的MvcPager控件。不得不說這個控件確實挺強大的,我也慢慢的探索着在我的Mvc系統中實現了分頁功能。
作為MvcPager的使用者,雖然作者的官網有很多實例,但是那都是單獨的實例,不具有完整性,所以我來介紹一下我在系統中使用MvcPager的過程,如果有什么說的不對的地方,還請大家指點。
首先,我們應該獲取MvcPager控件的程序集,但是我們最好不要直接獲取程序集,而是要獲取MvcPager的源代碼,因為我們要對他的源代碼進行部分的修改,以更合適的使用它。
下載好了MVcPager源代碼以后,我們就先來修改一下那個分頁使用的類PagedList。
1 public class PagedList<T> : List<T>,IPagedList 2 { 3 public PagedList(IList<T> items, int pageIndex, int pageSize)//這是IList類型 4 { 5 PageSize = pageSize; 6 TotalItemCount = items.Count; 7 CurrentPageIndex = pageIndex; 8 for (int i = StartRecordIndex - 1; i < EndRecordIndex; i++) 9 { 10 Add(items[i]); 11 } 12 } 13 14 public PagedList(IEnumerable<T> items, int pageIndex, int pageSize, int totalItemCount)//這是IEnumerable類型,
//我們使用C#語言,所以要多添加這么一個類型 15 { 16 AddRange(items); 17 TotalItemCount = totalItemCount; 18 CurrentPageIndex = pageIndex; 19 PageSize = pageSize; 20 } 21 22 public int CurrentPageIndex { get; set; } 23 public int PageSize { get; set; } 24 public int TotalItemCount { get; set; } 25 public int TotalPageCount { get { return (int)Math.Ceiling(TotalItemCount / (double)PageSize); } } 26 public int StartRecordIndex { get { return (CurrentPageIndex - 1) * PageSize + 1; } } 27 public int EndRecordIndex { get { return TotalItemCount > CurrentPageIndex * PageSize ? CurrentPageIndex * PageSize : TotalItemCount; } } 28 }
2.在我們修改了PagedList類以后,還要修改哪些地方呢?還有一個擴展方法,用來擴展PagedList
1 public static class PageLinqExtensions 2 { 3 public static PagedList<T> ToPagedList<T> 4 ( 5 this IEnumerable<T> allItems, 6 int pageIndex, 7 int pageSize 8 ) 9 { 10 if (pageIndex < 1) 11 pageIndex = 1; 12 var itemIndex = (pageIndex-1) * pageSize; 13 var pageOfItems = allItems.Skip(itemIndex).Take(pageSize); 14 var totalItemCount = allItems.Count(); 15 return new PagedList<T>(pageOfItems, pageIndex, pageSize, totalItemCount); 16 } 17 }
3.在我們修改了擴展方法以后,就可以在IEnumerable以后進行.ToPagedList<T>轉換成PagedList 分頁類
將獲取到的分頁列表數據轉換為PagedList類型以后,我們就要使用MvcPager來進行分頁顯示
我們定義了博客列表顯示Controller,將從數據庫中獲取到的列表數據通過MvcPager分頁
1 @{ 2 Layout = null; 3 } 4 @using Webdiyer.WebControls.Mvc 5 @model PagedList<Models.BlogInfo> 6 @{ 7 foreach (Models.BlogInfo blogInfo in Model) 8 { 9 <div class="post_item"> 10 <div class="digg"> 11 <div class="diggit"> 12 <span class="diggnum">0</span> 13 </div> 14 <div class="clear"> 15 </div> 16 <div class="digg_tip"> 17 </div> 18 </div> 19 <div class="post_item_body"> 20 <h3> 21 <a href="@blogInfo.LinkUrl" target="_blank" class="titlelink">@blogInfo.Title</a> 22 </h3> 23 <p class="post_iteme_summary"> 24 @blogInfo.BlogContent ... 25 </p> 26 <div class="post_item_foot"> 27 <a class="lightblue" href="@blogInfo.LinkUrl">@blogInfo.AuthorID</a> 28 @blogInfo.PublishTime.ToString() 29 <span class="article_comment"><a class="gray" title="">評論(0)</a> </span><span class="article_view"> 30 <a class="gray">閱讀(1)</a> </span> 31 </div> 32 </div> 33 <div class="clear"> 34 </div> 35 </div> 36 } 37 38 @Html.AjaxPager(Model, new PagerOptions() 39 { 40 PageIndexParameterName = "id", 41 ShowDisabledPagerItems = false, 42 ShowPageIndexBox = true 43 }, 44 new AjaxOptions() { UpdateTargetId = "post_list", OnBegin = "function(){alert('Ajax OnBegin 事件被引發');}", OnComplete = "AjaxStop" }) 45 }
5.Html.AjaxPager()方法就是MvcPager的一個擴展方法,擴展了HtmlHelper。對於其中的幾個參數我就不介紹了,也很容易理解。
6.有圖有證據 下面我來展示一下我的系統分頁顯示
3.使用MVCPager進行分頁顯示,更詳細的教程信息還是在官網,里面有這個控件可以實現的各種方法。我在這里只是介紹了一下我的分頁設計
順便說一句,我們程序員最忌諱的就是手高眼低,只有我們親手敲進去了以后,才能知道會遇到什么問題?千萬不要眼高手低!
索引:
使用正則表達式抓取博客園列表數據 (2012-12-15 22:16) | ||||||
Lucene.net 原理介紹以及使用方法 (2012-12-13 23:49) | ||||||
Asp.net MVC 使用Autofac的簡單使用 IOC (2012-12-12 13:16) | ||||||
Asp.net MVC 仿照博客園的簡單網站首頁 列表設計 (2012-12-11 22:21) | ||||||
為什么要從Web form過渡到MVC中 (2012-12-09 22:43) | ||||||
Asp.net MVC3 企業網站系統高仿博客園 首頁左側列表頁面 實現效果 (2012-12-08 19:11) | ||||||
Asp.net MVC 3 開發企業網站系統仿照博客園部分功能--總體設計 (2012-12-05 23:41) | ||||||
Asp.net MVC 3 開發簡單的企業系統開篇--數據庫 (2012-12-03 21:03) | ||||||
Asp.net MVC 3 開發一個簡單的企業網站系統 (2012-12-02 21:09) |