一、能夠使用MvcPager進(jìn)行分頁(yè)
一、MvcPager控件的簡(jiǎn)單使用
二、C#擴展方法
1、添加MvcPager.dll的引用[下載]
2、Control中的方法
1 //獲取列表 2 public ActionResult List(int? id = 1) 3 { 4 List<DTO.User> userList = new List<DTO.User>(); 5 int totalCount = 0; 6 int pageIndex = id ?? 1; 7 userList = SC.Repository.User.GetList("", 2, (pageIndex - 1) * 2, out totalCount); 8 PagedList<DTO.User> mPage = userList.AsQueryable().ToPagedList(pageIndex, 2); 9 mPage.TotalItemCount = totalCount;10 mPage.CurrentPageIndex = (int)(id ?? 1);11 return View(mPage);12 }
SC.Repository.User.GetList("", 2, (pageIndex - 1) * 2, out totalCount)方法為分頁(yè)方法,此處的StrUserName只是在查詢(xún)的時(shí)候一個(gè)條件而發(fā),其他和傳統的分頁(yè)一樣如下:
1 public static List<DTO.User> GetList(string StrUserName, int PageSize, int CurrentCount, out int TotalCount)
PagedList<DTO.User> mPage = userList.AsQueryable().ToPagedList(pageIndex, 2);
這里用到了擴展方法,首先將userList調用Linq中的擴展IEnumerable接口的方法,把List<T>轉換成為IQueryable<T>,接口如下:
1 public static IQueryable<TElement> AsQueryable<TElement>(this IEnumerable<TElement> source);
再調用MvcPager中對IQueryable<T>的擴展方法轉換成PagedList<T>供View中使用,接口如下:
1 public static PagedList<T> ToPagedList<T>(this IQueryable<T> allItems, int pageIndex, int pageSize);
3、View中使用MvcPager
1 @model PagedList<SongCai8.DTO.User> 2 @using Webdiyer.WebControls.Mvc; 3 @{ 4 Layout = null; 5 } 6 <!DOCTYPE html> 7 <html> 8 <head> 9 <title>List</title>10 </head>11 <body>12 @foreach (SongCai8.DTO.User user in Model)13 {14 @user.UserID<span>---</span>@user.UserName<span>---</span> 15 @Html.ActionLink("Edit", "Edit", new { id = user.UserID }) <span>---</span> 16 @Html.ActionLink("Details", "Details", new { id = user.UserID }) <span>---</span> 17 @Html.ActionLink("Delete", "Delete", new { id = user.UserID })<span>---</span> 18 19 <br />20 }21 <br />22 <br />23 @Html.Pager(Model, new PagerOptions24 {25 PageIndexParameterName = "id",26 ShowPageIndexBox = true,27 FirstPageText = "首頁(yè)",28 PrevPageText = "上一頁(yè)",29 NextPageText = "下一頁(yè)",30 LastPageText = "末頁(yè)",31 PageIndexBoxType = PageIndexBoxType.TextBox,32 PageIndexBoxWrapperFormatString = "請輸入頁(yè)數{0}",33 GoButtonText = "轉到"34 })35 <br />36 >>分頁(yè) 共有 @Model.TotalItemCount 篇留言 @Model.CurrentPageIndex/@Model.TotalPageCount37 </body>38 </html>
4、效果如下:

理解什么是擴展方法:用靜態(tài)類(lèi)及靜態(tài)方法為原有類(lèi)的添加新的方法。說(shuō)起來(lái)有點(diǎn)抽象,邊上代碼邊解釋。
原始類(lèi):
1 public class Person2 {3 public string ShowName()4 {5 return "顯示名稱(chēng)";6 }7 }
我們定義了一個(gè)Person類(lèi),類(lèi)里只有一個(gè)方法ShowName()。眾所周知,代碼如下:
1 Person person = new Person();2 person.ShowName();
擴展類(lèi):
加入“顯示密碼的”擴展方法(為了體現出對比性,下面代碼稍有重復):
1 //原始類(lèi) 2 public class Person 3 { 4 public string ShowName() 5 { 6 return "顯示名稱(chēng)"; 7 } 8 } 9 10 //擴展Person的靜態(tài)類(lèi)11 public static class ExtensionMethod12 {13 public static string ShowPassword(this Person person)14 {15 return "顯示密碼";16 }17 }
代碼解釋?zhuān)?/p>
ExtensionMethod中的ShowPassword參數this Person 說(shuō)明要擴展的類(lèi)型為Person類(lèi),并且要用this關(guān)鍵字修飾。在使用時(shí)這個(gè)參數是不需要傳入的,這點(diǎn)和我們在傳統的類(lèi)中方法參數有些不同。
使用:
使用與平時(shí)我們使用在類(lèi)中定義的方法相同,代碼如下:
1 Person person = new Person();2 //原始方法3 Response.Write(person.ShowName());4 //換行5 Response.Write("<br />");6 //擴展方法7 Response.Write(person.ShowPassword());
效果如下:

應用:
最常見(jiàn)的擴展方法是添加查詢(xún)功能添加到現有 System.Collections.IEnumerable 和 System.Collections.Generic.IEnumerable<T> 類(lèi)型的 LINQ 標準查詢(xún)運算符。若要使用標準查詢(xún)運算符,請首先將它們輸入與 using System.Linq 名稱(chēng)空間。 然后,任何實(shí)現了 IEnumerable<T> 的類(lèi)型看起來(lái)都具有 GroupBy、OrderBy、Average 等實(shí)例方法。 在 IEnumerable<T> 類(lèi)型的實(shí)例(如 List<T> 或 Array)后鍵入“dot”時(shí),可以在 IntelliSense 語(yǔ)句完成中看到這些附加方法。
詳細請查閱MSDN:http://msdn.microsoft.com/zh-cn/library/bb383977.aspx
聯(lián)系客服