ASP.NET MVC5 PagedList分頁示例

ASP.NET MVC是目前ASP.Net開發當中輕量級的Web開發解決方案,在ASP.NET MVC概述這篇譯文當中,已經詳細的介紹了ASP.NET MVC與Web Forms的區別以及各自的適用場景。因爲ASP.NET MVC尤爲適合網站的開發(Web Forms更適合業務系統的開發),目前成爲不少網站開發者的首先框架。css

這裏舉個典型的例子(表格的分頁),以此熟悉一下ASP.NET MVC的開發。開發環境:Windows 8.1企業版+VS2013旗艦版+SQL Server 2014。html

首先利用VS2013的嚮導,建立一個ASP.NET MVC5的應用程序。mysql

這個應用程序是能夠直接運行的,提供了一些默認的功能(註冊、登陸)以及各自的實現示例代碼,基本上開發者參考着這些代碼就能簡單開發了。這裏順便說一句,VS2013很是人性化,爲開發者考慮了不少。sql

1、修改數據庫配置數據庫

因爲這是默認建立的ASP.NET MVC應用程序,便於咱們開發,咱們最好修改一下數據庫配置。打開項目根目錄下的Web.config文件(注意,不是~/Views/下的Web.config)。app

將DefaultConnection配置爲:框架

 

 
  1. <connectionStrings>  
  2.     <add name="DefaultConnection" connectionString="uid=sa;pwd=123456;Data Source=192.168.0.4;  
  3.          database=|DataDirectory|\StudentDB.mdf;Initial Catalog=StudentDB;Integrated Security=True"  
  4.          providerName="System.Data.SqlClient" />  
  5.   </connectionStrings>  

 

因爲咱們要開發一個分頁Demo,順便在appSettings配置節點下,添加:ide

 

 
  1. <!-- 分頁條件:每頁顯示的記錄數-->  
  2. <add key="pageSize" value="8"/>  

 

2、建立Model測試

通常咱們開發MVC應用,都是從Model開始。咱們在項目的Models文件夾下面新建一個學生模型類。網站

 

 
  1. namespace MVC5PageDemo.Models  
  2. {  
  3.     public enum Sex  
  4.     {  
  5.         Female, Male  
  6.     }  
  7.   
  8.     public class Student  
  9.     {  
  10.         public int ID { get; set; }  
  11.   
  12.         public string Name { get; set; }  
  13.   
  14.         public int Age { get; set; }  
  15.   
  16.         public Sex Sex { get; set; }  
  17.   
  18.         public double Score { get; set; }  
  19.     }  
  20. }  

 

3、建立數據操做類

咱們先在項目的根目錄下,新建一個DAL目錄。而後在DAL目錄下,新建一個StudentContext類,並讓它繼承自DbContext。咱們這個例子使用EF來實現數據庫的操做。

因爲建立的MVC5應用,已經默認引入了EF6.0,能夠不用經過管理NuGet程序包來在線安裝EF。

StudentContext代碼以下:

 

 
  1. namespace MVC5PageDemo.DAL  
  2. {  
  3.     public class StudentContext : DbContext  
  4.     {  
  5.         public StudentContext() : base("DefaultConnection") { }  
  6.   
  7.         public DbSet<Student> Students { get; set; }  
  8.   
  9.     }  
  10. }  

 

咱們還須要使用到PagedList來進行分頁,所以須要在線安裝。咱們能夠經過程序包管理器控制檯輸入命令的方式進行安裝。

這樣咱們所須要的dll就自動添加到了項目當中。

4、建立Controller

MVC開發中有個規則叫作:約定大於配置。即:在建立Controller的時候,類名統一以Controller結尾,因此咱們建立一個StudentController的控制器。

 

  1. namespace MVC5PageDemo.Controllers  
  2. {  
  3.     public class StudentController : Controller  
  4.     {  
  5.         //數據庫上下文操做對象  
  6.         private StudentContext db = new StudentContext();  
  7.   
  8.         public ViewResult Index(int? page)  
  9.         {  
  10.             //學生列表  
  11.             var students = from s in db.Students select s;  
  12.   
  13.             //第幾頁  
  14.             int pageNumber = page ?? 1;  
  15.   
  16.             //每頁顯示多少條  
  17.             int pageSize = int.Parse(ConfigurationManager.AppSettings["pageSize"]);  
  18.   
  19.             //根據ID排序  
  20.             students = students.OrderBy(x => x.ID);  
  21.   
  22.             //經過ToPagedList擴展方法進行分頁  
  23.             IPagedList<Student> pagedList = students.ToPagedList(pageNumber, pageSize);  
  24.   
  25.             //將分頁處理後的列表傳給View  
  26.             return View(pagedList);  
  27.         }  
  28.     }  
  29. }  

 

如上代碼須要引入PagedList命名空間。

 

 
  1. using PagedList;  

 

5、建立View

咱們在StudentController控制器中的Index方法旁,鼠標右鍵-添加視圖,選擇相應的選項(此前先編譯一下項目,不然可能沒法正常添加視圖)。

將新建的~/Student/Index視圖文件修改成:

 

 
  1. @model PagedList.IPagedList<MVC5PageDemo.Models.Student>  
  2. @using PagedList.Mvc;  
  3. <link href="~/Content/PagedList.css" rel="stylesheet" />  
  4. <table class="table">  
  5.     <tr>  
  6.         <th>  
  7.             姓名  
  8.         </th>  
  9.         <th>  
  10.             年齡  
  11.         </th>  
  12.         <th>  
  13.             性別  
  14.         </th>  
  15.         <th>  
  16.             分數  
  17.         </th>  
  18.     </tr>  
  19.   
  20.     @foreach (var item in Model)  
  21.     {  
  22.         <tr>  
  23.             <td>  
  24.                 @Html.DisplayFor(modelItem => item.Name)  
  25.             </td>  
  26.             <td>  
  27.                 @Html.DisplayFor(modelItem => item.Age)  
  28.             </td>  
  29.             <td>  
  30.                 @Html.DisplayFor(modelItem => item.Sex)  
  31.             </td>  
  32.             <td>  
  33.                 @Html.DisplayFor(modelItem => item.Score)  
  34.             </td>  
  35.         </tr>  
  36.     }  
  37. </table>  
  38.   
  39. 每頁 @Model.PageSize 條記錄,共 @Model.PageCount 頁,當前第 @Model.PageNumber 頁  
  40. @Html.PagedListPager(Model, page => Url.Action("Index", new { page }))  

 

6、準備測試數據

在項目的根目錄下新建Initializer目錄,而後在裏面新建一個StudentInitializer類,並繼承自System.Data.Entity.DropCreateDatabaseAlways<StudentContext>。

 

 
  1. namespace MVC5PageDemo.Initializer  
  2. {  
  3.     public class StudentInitializer : System.Data.Entity.DropCreateDatabaseAlways<StudentContext>  
  4.     {  
  5.         protected override void Seed(StudentContext context)  
  6.         {  
  7.             List<Student> students = new List<Student>();  
  8.             for (int i = 1; i < 40; i++)  
  9.             {  
  10.                 Student student = new Student();  
  11.                 student.ID = i;  
  12.                 student.Name = "張" + i;  
  13.                 student.Age = 10 + i;  
  14.                 student.Sex = i % 2 == 0 ? Sex.Female : Sex.Male;  
  15.                 student.Score = 60 + i;  
  16.   
  17.                 students.Add(student);  
  18.             }  
  19.   
  20.             context.Students.AddRange(students);  
  21.             context.SaveChanges();  
  22.         }  
  23.     }  
  24. }  

 

在Web.config的entityFramework節點下添加以下配置:

 

 
  1. <contexts>  
  2.    <context type="MVC5PageDemo.DAL.StudentContext,MVC5PageDemo">  
  3.       <databaseInitializer type="MVC5PageDemo.Initializer.StudentInitializer,MVC5PageDemo"/>  
  4.    </context>  
  5. </contexts>  

 

MVC5PageDemo.DAL.StudentContext是命名空間名+類名,逗號後面的MVC5PageDemo是StudentContext類所在的dll文件的名稱。context節點下的databaseInitializer的配置同理。

 

如上就完成了基於ASP.NET MVC5分頁表格的開發。

最終的效果圖:

相關文章
相關標籤/搜索