首页 > 代码库 > ASP.NET MVC5 PagedList分页示例

ASP.NET MVC5 PagedList分页示例

ASP.NET MVC是目前ASP.Net开发当中轻量级的Web开发解决方案,在ASP.NET MVC概述这篇译文当中,已经详细的介绍了ASP.NET MVC与Web Forms的区别以及各自的适用场景。由于ASP.NET MVC尤其适合网站的开发(Web Forms更适合业务系统的开发),目前成为很多网站开发者的首先框架。

这里举个典型的例子(表格的分页),以此熟悉一下ASP.NET MVC的开发。开发环境:Windows 8.1企业版+VS2013旗舰版+SQL Server 2014。

首先利用VS2013的向导,创建一个ASP.NET MVC5的应用程序。

这个应用程序是可以直接运行的,提供了一些默认的功能(注册、登录)以及各自的实现示例代码,基本上开发者参考着这些代码就能简单开发了。这里顺便说一句,VS2013非常人性化,为开发者考虑了很多。

一、修改数据库配置

由于这是默认创建的ASP.NET MVC应用程序,便于我们开发,我们最好修改一下数据库配置。打开项目根目录下的Web.config文件(注意,不是~/Views/下的Web.config)。

将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配置节点下,添加:

 

 
  1. <!-- 分页条件:每页显示的记录数-->  
  2. <add key="pageSize" value=http://www.mamicode.com/"8"/>  

 

二、创建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. }  

 

三、创建数据操作类

我们先在项目的根目录下,新建一个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就自动添加到了项目当中。

四、创建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;  

 

五、创建View

我们在StudentController控制器中的Index方法旁,鼠标右键-添加视图,选择相应的选项(此前先编译一下项目,否则可能无法正常添加视图)。

技术分享

将新建的~/Student/Index视图文件修改为:

 

 
  1. @model PagedList.IPagedList<MVC5PageDemo.Models.Student>  
  2. @using PagedList.Mvc;  
  3. <link href=http://www.mamicode.com/"~/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 }))  

 

六、准备测试数据

在项目的根目录下新建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分页表格的开发。

最终的效果图:

技术分享

ASP.NET MVC5 PagedList分页示例