首先我们通过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>

ASP.NET MVC 简单的分页思想与实现的更多相关文章

  1. ASP.NET MVC 简单分页代码

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  2. Asp.net MVC 简单分页 自做简单分页

    Asp.net MVC 简单分页:   public static string Pager(int page,int pageSize,int total)         {           ...

  3. ASP.NET MVC利用PagedList分页(二)PagedList+Ajax+JsRender

    (原文) 昨天在ASP.NET MVC利用PagedList分页(一)的 最后一节提到,一个好的用户体验绝对不可能是点击下一页后刷新页面,所以今天来说说利用Ajax+PagedList实现无刷新(个人 ...

  4. ASP.NET MVC 简单介绍①

    ASP.NET  MVC 简单介绍① 只做了重要描述,内容出自菜鸟教程网站内容. 目录 1布局 2HTML 帮助器 3.Razor 语法 4.添加样式 5.Layout 6. Controllers ...

  5. ASP.NET MVC 简单事务添加

    ASP.NET MVC 简单事务 //实例化查询上下文 using ( BookStoreEntities db = new BookStoreEntities()) { //找到需要价格和名称的数据 ...

  6. asp.net mvc easyui datagrid分页

    提到 asp.net mvc 中的分页,很多是在用aspnetpager,和easyui datagrid结合的分页却不多,本文介绍的是利用easyui 中默认的分页控件,实现asp.net mvc分 ...

  7. asp.net mvc简单实现基于Razor的分页控件

    最近在写一些web应用了解了一下asp.net mvc发现的确好用,所以直接就干上了.不过在使用asp.net mvc的Razor模板的情况并不向传统webform那样可以使用控件.但从Razor的功 ...

  8. asp.net mvc 简单项目框架的搭建过程(一)对Bll层和Dal层进行充分解耦

    学习asp.net 已经有近三个月的时间了,在asp.net mvc上花的时间最多,但个人真是有些菜,不得不说,asp.net mvc的水真的还是蛮深的.目前在公司实习,也见过公司几个项目的代码了.对 ...

  9. ASP.NET MVC利用PagedList分页(一)

    前几天看见博客园上有人写ASP.NET MVC的分页思想,这让我不禁想起了PagedList.PagedList是NuGet上提供的一个分页的类库,能对任何IEnumerable<T>进行 ...

随机推荐

  1. 浙南联合训练赛 H - The number of positions

    Petr stands in line of n people, but he doesn't know exactly which position he occupies. He can say ...

  2. C++多重继承二义性解决

    1. 什么是多重继承的二义性 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class A{ public:     void f(); }   class B{ pu ...

  3. Linux用来抗衡Win的那些桌面环境

    作为一个 Linux 的爱好者,参加了 9 月 22 日 Linux Deepin 在北京举行的用户与开发者大会(给大家一个链接).名为参加会议,实为打酱油.但 Linux Deepin 团队的一些理 ...

  4. mysql 碎片清理

    在MySQL中,我们经常会使用VARCHAR.TEXT.BLOB等可变长度的文本数据类型.不过,当我们使用这些数据类型之后,我们就不得不做一些额外的工作——MySQL数据表碎片整理. 那么,为什么在使 ...

  5. [Eclipse插件] 安装和使用JD-Eclipse插件

    JD-Core 是一个免费的库,从一个或多个“.class”文件中 重构Java源代码.JD-Core可以用来恢复丢失的源代码,并深究Java运行时类库.支持Java 5的功能:如注释,泛型或键入“枚 ...

  6. 非docker的jenkins的master如何使用docker的jenkins的slave

    前提 1.存在jenkins的master,这个master不是docker的,是通过yum install jenkins安装的 2.使用docker创建n个jenkins,方法是docker pu ...

  7. 【转载】PHP中require(),include(),require_once()和include_once()区别

    关于这方面的知识,这篇文章讲的较全: http://www.jb51.net/article/22467.htm require 的使用方法如 require("MyRequireFile. ...

  8. http://www.cnblogs.com/CBDoctor/p/4459750.html

    http://www.cnblogs.com/CBDoctor/p/4459750.html

  9. WinForm客户端调用 WebService时 如何启用Session

    WinForm客户端调用 WebService时 如何启用Session 摘自: http://www.cnblogs.com/swtseaman/archive/2011/04/18/2020176 ...

  10. hue启用ldap

    [desktop] [[auth]] …… …… backend=desktop.auth.backend.LdapBackend .….. http://gethue.com/ldap-or-pam ...