MVC 简单的分页思想与实现
2012-05-28 14:20
471 查看
ASP.NET MVC 简单的分页思想与实现
作为一个程序猿,数据分页是每个人都会遇到的问题。解决方案更是琳琅满目,花样百出。但基本的思想都是差不多的。下面给大家分享一个简单的分页器,让初学者了解一下最简单的分页思想,以及在ASP.NET MVC中的简单实现与应用。
一,定义分页器类
在ASP.NET MVC中,分页的数据源可能是各种不同的类型,所以最好使用泛型来定义。
public class PagingHelper<T>
二,基本三要素
实现分页人所共知的三个基本属性:
DataSource:数据源,要知道数据源共计多少条数据,会对应一个数据源的方法-Count(),
PageSize:来描述每页显示的记录的条数。
PageIndex:当前页的索引值,一般第一页的索引值为0,当然为了表示方便,可以从1开始,并且后面默认为从1开始。
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"} }; } } }
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); } }
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);//返回分页器实例到视图 } }
@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>
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // 路由名称 "{controller}/{action}/{pageIndex}", // 带有参数的 URL new { controller = "Home", action = "Index", pageIndex = UrlParameter.Optional } // 参数默认值 ); }
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // 路由名称 "{controller}/{action}/{pageIndex}", // 带有参数的 URL new { controller = "Home", action = "Index", pageIndex = UrlParameter.Optional } // 参数默认值 ); }
现在保存之后F5运行,就可以看到一个简单的分页程序了。
URL在进行了路由配置之后,也不会再是http://localhost:1234/Home/Index?pageIndex=1
而变成了http://localhost:1234/Home/Index/1 这样的静态URL,更简洁,更美观。
---------------------------------------End---------------------------------------
这篇中的提到分页器,只是一个很简易的分页思想的实现,其实本身的性能还是有待提高的。
希望能抛砖引玉,哪位大神能分享出性能更强大的分页程序。
文章中最后提到了URL重写与优化,如果看官们有兴趣,可以参见我之前的文章:
ASP.NET MVC URL重写与优化(初级篇)-使用Global路由表定制URL
ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase玩转URL
相关文章推荐
- ASP.NET MVC 简单的分页思想与实现
- ASP.NET MVC 简单的分页思想与实现
- ASP.NET MVC 简单的分页思想与实现
- ASP.NET MVC 简单的分页思想与实现
- ASP.NET MVC 简单的分页思想与实现
- 分页查询简单实现(Freemarker+SpringMVC+Mybatis)
- mvc 、bootstrap 结合分布式图简单实现分页
- springmvc+Mybatis 分页查询的简单实现
- mybatis+oracle+springMVC实现简单分页
- springmvc + myBatis + boostrap技术下简单实现的前后端分页功能
- asp.net mvc 简单分页实现
- asp.net mvc简单实现基于Razor的分页控件
- springmvc+mybatis实现简单的图书管理系统
- 一个简单的oracle分页存储过程的实现和调用
- MVC简单实现查询列表
- php分页代码简单实现
- PHP实现MVC开发: 一个简单的MVC
- js读取xml文档,并实现简单分页
- MVC中使用MVCPager简单分页
- 【转载】MVC精华之实现AJAX分页和搜索 及 实现HTML分页和搜索