关于asp.net mvc的分页,网上已经有很多了。本来也想借用,先看了杨涛写的分页控件,感觉用起来稍微有点复杂,而我只需要简单的分页。分页我写过很多次,原理也熟悉,就是构造首页、上一页、下一页及末页的链接,做得好点,还可以有页码、下拉分页等。于是我又造了一个轮子。
先准备数据,这里以人员信息为例:
public string Name { get; set; } |
public int Age { get; set; } |
初始化100条数据,并提供一个方法,可以从这些数据中按照分页大小和页码获取。
public class PersonHelper |
private static List<PersonInfo> list; |
list = new List<PersonInfo>(); |
for (int i = 0; i < 100; i++) |
list.Add(new PersonInfo() |
Name = "姓名" + i.ToString(), |
public static IEnumerable<PersonInfo> GetList(int pageSize, int pageIndex) |
return list.Skip((pageIndex - 1) * pageSize).Take(pageSize); |
Model定义:其中包含了分页大小、当前页码、记录数和人员信息集合。
using System.Collections.Generic; |
using MvcApplication2.Code; |
namespace MvcApplication2.Models |
public class PersonListModels |
public int PageIndex { get; set; } |
public int PageSize { set; get; } |
public int RecordCount { get; set; } |
public IEnumerable<PersonInfo> Persons { get; set; } |
Controller中的处理:
public ActionResult PersonList(int? pageIndex) |
if (pageIndex == null || pageIndex <= 0) |
IEnumerable<PersonInfo> query = PersonHelper.GetList(pageSize, pageIndex.Value); |
NewsModels model = new NewsModels() |
PageIndex = pageIndex.Value, |
View中处理:
@model MvcApplication2.Models.PersonListModels |
ViewBag.Title = "Person List"; |
@foreach (MvcApplication2.Code.PersonInfo info in Model.Persons) |
@Url.Pager("Home", "PersonList", Model.PageSize, Model.PageIndex, Model.RecordCount) |
重点就在@Url.Pager的使用了。扩展UrlHelper的代码如下:
public static class HtmlExtend |
/// 扩展UrlHelper,实现输出分页HTML |
/// <param name="urlHelper"></param> |
/// <param name="controllerName">控制器名</param> |
/// <param name="actionName">行为名</param> |
/// <param name="pageSize">分页大小</param> |
/// <param name="pageIndex">当前页码</param> |
/// <param name="recordCount">总记录数</param> |
public static MvcHtmlString Pager(this UrlHelper urlHelper, string controllerName, string actionName, int pageSize, int pageIndex, int recordCount) |
return MvcHtmlString.Create(string.Empty); |
int pageCount = (int)decimal.Ceiling((decimal)recordCount / (decimal)pageSize); |
string firstStr = string.Empty; |
string lastStr = string.Empty; |
string firstUrl = urlHelper.Action(actionName, controllerName, new { pageIndex = 1 }); |
firstStr = "<a href='" + firstUrl + "'>首页</a>"; |
string lastUrl = urlHelper.Action(actionName, controllerName, new { pageIndex = pageCount }); |
lastStr = "<a href='" + lastUrl + "'>末页</a>"; |
string preStr = string.Empty; |
if (pageIndex > 1 && pageIndex <= pageCount) |
string prevUrl = urlHelper.Action(actionName, controllerName, new { pageIndex = pageIndex - 1 }); |
preStr = "<a href='" + prevUrl + "'>上一页</a>"; |
string nextStr = string.Empty; |
if (pageIndex > 0 && pageIndex < pageCount) |
string nextUrl = urlHelper.Action(actionName, controllerName, new { pageIndex = pageIndex + 1 }); |
nextStr = "<a href='" + nextUrl + "'>下一页</a>"; |
string numStr = string.Empty; |
for (int i = 1; i <= pageCount; i++) |
string numUrl = urlHelper.Action(actionName, controllerName, new { pageIndex = i }); |
numStr += "[<a href='" + numUrl + "'><strong>" + i + "</strong></a>] "; |
numStr += "[<a href='" + numUrl + "'>" + i + "</a>] "; |
string pageStr = firstStr + " " + preStr + " " + numStr + nextStr + " " + lastStr; |
return MvcHtmlString.Create(pageStr); |
看看效果:

这个扩展没有实现页码分段显示,有兴趣的朋友可以自己试试。
文章来源:http://blog.bossma.cn/asp_net_mvc/asp-net-mvc-url-pager/
- 基于存储过程的MVC开源分页控件--LYB.NET.SPPager
摘要 现在基于ASP.NET MVC的分页控件我想大家都不陌生了,百度一下一大箩筐.其中有不少精品,陕北吴旗娃杨涛大哥做的分页控件MVCPager(http://www.webdiyer.com/)算 ...
- 基于存储过程的MVC开源分页控件
基于存储过程的MVC开源分页控件--LYB.NET.SPPager 摘要 现在基于ASP.NET MVC的分页控件我想大家都不陌生了,百度一下一大箩筐.其中有不少精品,陕北吴旗娃杨涛大哥做的分页控件M ...
- Mvc自定义分页控件
MVC开发分页常常使用第三方控件,生成的分页HTML带有版权申明,虽然免费,但是总有的别扭.于是,某日,楼主闲来蛋疼,折腾了个自定义分页控件: 先来展示下效果图: 1>当分页不超过10页的时候, ...
- MVC简单分页
对Car汽车表分页 实现简单分页,放在这里方便查看回顾,自定义每页几条有点问题,有待完善······ 1.新建mvc项目 2.添加linq to sql 数据库连接 3.添加CarBF类 using ...
- MVC快速分页
.NET手记-ASP.NET MVC快速分页的实现 对于Web应用,展示List是很常见的需求,随之而来的常见的分页组件.jQuery有现成的分页组件,网上也有着大量的第三方分页组件,都能够快速实 ...
- MVC自定义分页
MVC自定义分页 之前我发表了一篇MVC无刷新分页的文章,里面用的是MvcPager控件,但是那个受那个控件限制,传值只能用PagedList,各方面都受到了限制,自由度不够高,现在还是做MVC无刷新 ...
- 学习ASP.NET MVC(十一)——分页
在这一篇文章中,我们将学习如何在MVC页面中实现分页的方法.分页功能是一个非常实用,常用的功能,当数据量过多的时候,必然要使用分页.在今天这篇文章中,我们学习如果在MVC页面中使用PagedList. ...
- ASP.NET MVC 简单分页代码
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- [Oracle]关于Oracle分页写法的性能分析及ROWNUM说明
关于分页写法的性能分析及ROWNUM的补充说明 分页写法 一.测试前数据准备 SQL> SELECT COUNT(*) FROM BPM_PROCVAR; COUNT(*) ---------- ...
随机推荐
- PMP 质量管理7张图 很形象
PMP 质量管理 中的因果图.控制图.流程图.核查表.直方图.帕累托图.散点图
- android 开发 - 结束所有activity
每一个activity都有自己的生命周期,被打开了最终就要被关闭. 四种结束当前的activity方法 //关闭当前activity方法一 finish(); //关闭当前界面方法二 android. ...
- 怎么在android实现通过浏览器点击链接打开apk
intent://scan/#Intent;scheme=appname://appname/[频道]/[id];package=com.appname.package;end http://m.ch ...
- highcharts配置的效果如下
配置如下: function init(categoryArray,seriesData,month_first_day,month_last_day,currDay){ var chart = Hi ...
- LeetCode 笔记系列16.2 Minimum Window Substring [从O(N*M), O(NlogM)到O(N),人生就是一场不停的战斗]
题目:Given a string S and a string T, find the minimum window in S which will contain all the characte ...
- 2018-2019-1 20165330 《信息安全系统设计基础》第六周课上测试ch02&课下作业
课上测试 测试-3-ch02 任务详情 编写一个程序 "week0203学号.c",运行下面代码: 1 short int v = -学号后四位 2 unsigned short ...
- jquery.easing的使用
下载地址:http://www.jb51.net/jiaoben/32922.html 基本语法:easing:格式为json,{duration:持续时间,easing:过渡效果,complete: ...
- 【转】UML中类与类之间的5种关系表示
一.继承关系 继承指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功能的能力.在Java中继承关系通过关键字extends明确标识,在设计时一 ...
- Storm-wordcount实时统计单词次数
一.本地模式 1.WordCountSpout类 package com.demo.wc; import java.util.Map; import org.apache.storm.spout.Sp ...
- MPI Maelstrom---poj1502(最短路模板)
题目链接:http://poj.org/problem?id=1502 题意:求从处理器1到其它处理器所需的最少时间是多少: 输入是下三角,如果是x表示A[i][j]不能直接联系: #include ...