ASP.NET MVC 简单的分页思想与实现

 首先我们通过VS创建一个空的基于Razor视图引擎的ASP.NET MVC3 Web应用程序,命名为JohnConnor.Web

  对创建过程或Razor不太了解的看官,请移步 ASP.NET MVC Razor视图引擎攻略 <传送门> ,这里就不再赘述了。

  然后我们需要进行以下几步

  1,Models文件夹下,添加Student.cs文件,添加以下代码,为了演示方便这里模拟了一个数据源,实际中的数据源可能来自数据库。

复制代码
    public class Student
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
    public static class Students
    {
        public static IEnumerable<Student> data
        {
            get
            {
                return new List<Student>()
                {
                    new Student{ Id=0, Name="John"},
                    new Student{ Id=1, Name="Marry"},
                    new Student{ Id=2, Name="Andy"},
                    new Student{ Id=3, Name="Tom"},
                    new Student{ Id=4, Name="Lydia"},
                    new Student{ Id=5, Name="Chris"},
                    new Student{ Id=6, Name="Justin"},
                    new Student{ Id=7, Name="Susan"}
                };
            }
        }
    }
复制代码

  2,Models文件夹下,添加PagingHelper.cs文件,添加我们上述分页器类。

复制代码
 public class PagingHelper<T>
    {
        //分页数据源
        public IEnumerable<T> DataSource { get; private set; }
        //每页显示记录的数量
        public int PageSize { get; private set; }
        //当前页数
        public int PageIndex { get; set; }
        //分页总页数
        public int PageCount { get; private set; }

        //是否有前一页
        public bool HasPrev { get { return PageIndex > 1; } }
        //是否有下一页
        public bool HasNext { get { return PageIndex < PageCount; } }
        //构造函数
        public PagingHelper(int pageSize, IEnumerable<T> dataSource)
        {
            this.PageSize = pageSize > 1 ? pageSize : 1;
            this.DataSource = dataSource;
            PageCount = (int)Math.Ceiling(dataSource.Count() / (double)pageSize);
        }
        //获取当前页数据
        public IEnumerable<T> GetPagingData()
        {
            return DataSource.Skip((PageIndex - 1) * PageSize).Take(PageSize);
        }
    }
复制代码

  3,在Controller文件夹下添加控制器命名为HomeController,添加以下代码。

复制代码
 public class HomeController : Controller
    {
        public ActionResult Index(int pageIndex=1)
        {
            PagingHelper<Student> StudentPaging = new PagingHelper<Student>(2, Students.data);//初始化分页器
            StudentPaging.PageIndex = pageIndex;//指定当前页
            return View(StudentPaging);//返回分页器实例到视图
        }
    }
复制代码

  4,在View文件夹下添加Home文件夹,并新增视图文件Index.cshtml,添加以下代码。

复制代码
@using JohnConnor.Web.Models
@model PagingHelper<Student>
@{
    ViewBag.Title = "Index";
}
<h2>Index</h2>
@foreach (var Data in Model.GetPagingData())
{
    <p>ID:@Data.Id Name:@Data.Name</p>
}
<p>
@if (Model.HasPrev)
{
    <a href="@Url.Action("Index", "Home", new { pageIndex = Model.PageIndex - 1 })">上一页</a>
}
else
{
    <em style="color:Gray">上一页</em>
}
@if (Model.HasNext)
{
    <a href="@Url.Action("Index", "Home", new { pageIndex = Model.PageIndex + 1 })">下一页</a>
}
else
{
      <em style="color:Gray">下一页</em>
}
</p>
复制代码

猜你喜欢

转载自www.cnblogs.com/lzfsuifeng/p/9106556.html