朋友炒股兩個月賺了10萬,我幫他推廣一下公眾號,把錢用來投資總比放銀行連通貨膨脹都跑不過里強, 硬核離職,在家炒股 ,這是他每天的日志,有些經驗是花錢也買不到的。
本文目標
一、能夠使用MvcPager進行分頁
本文目錄
一、MvcPager控件的簡單使用
二、C#擴展方法
一、MvcPager控件的簡單使用
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)方法為分頁方法,此處的StrUserName只是在查詢的時候一個條件而發,其他和傳統的分頁一樣如下:
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 PagerOptions 24 { 25 PageIndexParameterName = "id", 26 ShowPageIndexBox = true, 27 FirstPageText = "首頁", 28 PrevPageText = "上一頁", 29 NextPageText = "下一頁", 30 LastPageText = "末頁", 31 PageIndexBoxType = PageIndexBoxType.TextBox, 32 PageIndexBoxWrapperFormatString = "請輸入頁數{0}", 33 GoButtonText = "轉到" 34 }) 35 <br /> 36 >>分頁 共有 @Model.TotalItemCount 篇留言 @Model.CurrentPageIndex/@Model.TotalPageCount 37 </body> 38 </html>
4、效果如下:
二、C#擴展方法
MSDN:擴展方法使您能夠向現有類型“添加”方法,而無需創建新的派生類型、重新編譯或以其他方式修改原始類型。 擴展方法是一種特殊的靜態方法,但可以像擴展類型上的實例方法一樣進行調用。
理解什么是擴展方法:用靜態類及靜態方法為原有類的添加新的方法。說起來有點抽象,邊上代碼邊解釋。
原始類:
1 public class Person 2 { 3 public string ShowName() 4 { 5 return "顯示名稱"; 6 } 7 }
我們定義了一個Person類,類里只有一個方法ShowName()。眾所周知,代碼如下:
1 Person person = new Person(); 2 person.ShowName();
擴展類:
加入“顯示密碼的”擴展方法(為了體現出對比性,下面代碼稍有重復):
1 //原始類 2 public class Person 3 { 4 public string ShowName() 5 { 6 return "顯示名稱"; 7 } 8 } 9 10 //擴展Person的靜態類 11 public static class ExtensionMethod 12 { 13 public static string ShowPassword(this Person person) 14 { 15 return "顯示密碼"; 16 } 17 }
代碼解釋:
ExtensionMethod中的ShowPassword參數this Person 說明要擴展的類型為Person類,並且要用this關鍵字修飾。在使用時這個參數是不需要傳入的,這點和我們在傳統的類中方法參數有些不同。
使用:
使用與平時我們使用在類中定義的方法相同,代碼如下:
1 Person person = new Person(); 2 //原始方法 3 Response.Write(person.ShowName()); 4 //換行 5 Response.Write("<br />"); 6 //擴展方法 7 Response.Write(person.ShowPassword());
效果如下:
應用:
最常見的擴展方法是添加查詢功能添加到現有 System.Collections.IEnumerable 和 System.Collections.Generic.IEnumerable<T> 類型的 LINQ 標准查詢運算符。若要使用標准查詢運算符,請首先將它們輸入與 using System.Linq 名稱空間。 然后,任何實現了 IEnumerable<T> 的類型看起來都具有 GroupBy、OrderBy、Average 等實例方法。 在 IEnumerable<T> 類型的實例(如 List<T> 或 Array)后鍵入“dot”時,可以在 IntelliSense 語句完成中看到這些附加方法。
詳細請查閱MSDN:http://msdn.microsoft.com/zh-cn/library/bb383977.aspx