HtmlHelper的扩展分页方法
一、新建一个空MVC项目,命名为MVCAppPager

二、新建一个文件夹PageHelper,在文件夹下新建接口IPageList以及实现类PageList
IPageList接口:
public interface IPageList
{
/// <summary>
/// 第几页
/// </summary>
int PageIndex { get; set; } /// <summary>
/// 每页记录数
/// </summary>
int PageSize { get; set; } /// <summary>
/// 总页数
/// </summary>
int PageTotal { get; } /// <summary>
/// 记录总数
/// </summary>
long RecordTotal { get; set; } /// <summary>
/// 每页开始位置
/// </summary>
long CurrentStart { get; }
/// <summary>
/// 每页结束位置
/// </summary>
long CurrentEnd { get; }
}
PageList实现类:
public class PageList<T> : List<T>, IPageList
{
public PageList(IEnumerable<T> source) : base(source)
{ } public PageList(IEnumerable<T> source, int pageIndex, int pageSize, long recordTotal)
{
if (source != null)
{
this.AddRange(source);
} PageIndex = pageIndex;
PageSize = pageSize;
RecordTotal = recordTotal; } public int PageIndex { get; set; } public int PageSize { get; set; } public long RecordTotal { get; set; } public int PageTotal
{
get
{
return RecordTotal % PageSize == ? (int)RecordTotal / PageSize : (int)RecordTotal / PageSize + ;
}
} public long CurrentStart
{
get
{
return PageIndex * PageSize + ;
}
} public long CurrentEnd
{
get
{
return (PageIndex + ) * PageSize > RecordTotal ? RecordTotal : (PageIndex + ) * PageSize;
}
}
}
三、创建分页HtmlHelper扩展方法Pager
namespace System.Web.Mvc
{
public static class ExtHelper
{
public static MvcHtmlString Pager(this HtmlHelper helper, IPageList list)
{
var redirectTo = helper.ViewContext.RequestContext.HttpContext.Request.Url.AbsolutePath;
var output = new StringBuilder();
if (list.PageTotal > )
{
output.AppendFormat("<div class='paginator'>");
//处理首页连接
output.AppendFormat("<a class='pageLink' href='{0}?pageIndex=0&pageSize={1}'>首页</a> ", redirectTo, list.PageSize); if (list.PageIndex > )
{//处理上一页的连接
output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>上一页</a> ", redirectTo, list.PageIndex - , list.PageSize);
}
else
{
output.Append("<a class='pageLink'>上一页</a>");
} output.Append(" ");
int currint = ;
for (int i = ; i <= ; i++)
{//一共最多显示10个页码,前面5个,后面5个
if ((list.PageIndex + i - currint) >= && (list.PageIndex + i - currint) < list.PageTotal)
{
if (currint == i)
{//当前页处理
output.AppendFormat("<a class='cpb' href='{0}?pageIndex={1}&pageSize={2}'>{3}</a> ", redirectTo, list.PageIndex, list.PageSize, list.PageIndex + );
}
else
{//一般页处理
output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>{3}</a> ", redirectTo, list.PageIndex + i - currint, list.PageSize, list.PageIndex + i - currint + );
}
}
output.Append(" ");
}
if (list.PageIndex < list.PageTotal - )
{//处理下一页的链接
output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>下一页</a> ", redirectTo, list.PageIndex + , list.PageSize);
}
else
{
output.Append("<a class='pageLink'>下一页</a>");
}
output.Append(" ");
if (list.PageIndex != list.PageTotal - )
{
output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>末页</a> ", redirectTo, list.PageTotal - , list.PageSize);
}
output.Append(" ");
}
output.AppendFormat("第{0}页 / 共{1}页", list.PageIndex+, list.PageTotal);//这个统计加不加都行
output.AppendFormat("</div>");
return new MvcHtmlString(output.ToString());
}
}
}
注意将命名空间修改为:namespace System.Web.Mvc,这样就不用每个页面都要引用命名空间了
四、控制器方式实现
1.在Models文件夹下,新建一个Order实体
namespace MvcAppPager.Models
{
public class Order
{
public long ID { get; set; } public string OrderNo { get; set; } public decimal WayFee { get; set; } public string EMS { get; set; } }
}
2.新建一个Home控制器,实现如下
public class HomeController : Controller
{
/// <summary>
/// 构造数据
/// </summary>
List<Order> list = new List<Order>
{
new Order { ID = ,OrderNo="",WayFee=,EMS="C01111"},
new Order { ID = ,OrderNo="",WayFee=,EMS="C01221"},
new Order { ID = ,OrderNo="",WayFee=,EMS="C03411"},
new Order { ID = ,OrderNo="",WayFee=,EMS="C01341"},
new Order { ID = ,OrderNo="",WayFee=,EMS="C01551"},
new Order { ID = ,OrderNo="",WayFee=,EMS="C02341"}
}; // GET: Home
public ActionResult Index(int pageIndex = ,int pageSize = )
{
List<Order> source = list.Skip(pageIndex * pageSize).Take(pageSize).ToList();
PageList <Order> orderList = new PageList<Order>(source, pageIndex, pageSize, list.Count);
return View(orderList);
}
}
五、Index视图
@model MvcAppPager.PageHelper.PageList<MvcAppPager.Models.Order>
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<style>
.paginator {
font: 12px Arial, Helvetica, sans-serif;
padding: 10px 20px 10px ;
margin: 0px;
}
.paginator a {
border: solid 1px #ccc;
color: #0063dc;
cursor: pointer;
text-decoration: none;
}
.paginator a:visited {
padding: 1px 6px;
border: solid 1px #ddd;
background: #fff;
text-decoration: none;
}
.paginator .cpb {
border: 1px solid #F50;
font-weight: ;
color: #F50;
background-color: #ffeee5;
}
.paginator a:hover {
border: solid 1px #F50;
color: #f60;
text-decoration: none;
}
.paginator a, .paginator a:visited, .paginator .cpb, .paginator a:hover {
float: left;
height: 16px;
line-height: 16px;
min-width: 10px;
_width: 10px;
margin-right: 5px;
text-align: center;
white-space: nowrap;
font-size: 12px;
font-family: Arial,SimSun;
padding: 3px;
}
</style>
</head>
<body>
<table>
<thead>
<tr>
<th>ID</th>
<th>订单号</th>
<th>运单号</th>
<th>运费</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>@item.ID</td>
<td>@item.OrderNo</td>
<td>@item.EMS</td>
<td>@item.WayFee</td>
</tr>
}
</tbody>
</table>
@Html.Pager(Model)
</body>
</html>
六、运行效果如下图:

HtmlHelper的扩展分页方法的更多相关文章
- ASP.Net MVC开发基础学习笔记:二、HtmlHelper与扩展方法
一.一个功能强大的页面开发辅助类—HtmlHelper初步了解 1.1 有失必有得 在ASP.Net MVC中微软并没有提供类似服务器端控件那种开发方式,毕竟微软的MVC就是传统的请求处理响应的回归. ...
- ASP.Net MVC开发基础学习笔记(2):HtmlHelper与扩展方法
一.一个功能强大的页面开发辅助类—HtmlHelper初步了解 1.1 有失必有得 在ASP.Net MVC中微软并没有提供类似服务器端控件那种开发方式,毕竟微软的MVC就是传统的请求处理响应的回归. ...
- HtmlHelper的扩展
HtmlHelper的扩展: 注意点:扩展方法必须是静态方法,所在的类必须是静态类,所在的命名空间改成System.Web.MVC则能省略页面中必须添加命名空间的约束. //主要就是输出分页的超级链接 ...
- C# 分页方法
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Web; ...
- 只是一个用EF写的一个简单的分页方法而已
只是一个用EF写的一个简单的分页方法而已 慢慢的写吧.比如,第一步,先把所有数据查询出来吧. //第一步. public IQueryable<UserInfo> LoadPagesFor ...
- Laravel 中通过自定义分页器分页方法实现伪静态分页链接以利于 SEO
我们知道,Laravel 自带的分页器方法包含 simplePaginate 和 paginate 方法,一个返回不带页码的分页链接,另一个返回带页码的分页链接,但是这两种分页链接页码都是以带问号的动 ...
- 在 Laravel 中通过自定义分页器分页方法实现伪静态分页链接以利于 SEO
我们知道,Laravel 自带的分页器方法包含 simplePaginate 和 paginate 方法,一个返回不带页码的分页链接,另一个返回带页码的分页链接,但是这两种分页链接页码都是以带问号的动 ...
- jquery 扩展插件方法
分析插件jquery.countdown.js (function($) { $.fn.countdown = function(options) { // default options var d ...
- js 判断数组包含某值的方法 和 javascript数组扩展indexOf()方法
var questionId = []; var anSwerIdValue = []; ////javascript数组扩展indexOf()方法 Array.prototype.indexOf ...
随机推荐
- Linux系统之间文件传输 scp 命令
个人使用记录 scp /home/liwm/Downloads/mysql-5.5.32-linux2.6-x86_64.tar.gz root@192.168.122.3:/home/oldboy/ ...
- 纯净版linux (debian)挂载VirtualBox共享文件夹
使用的虚拟机版本是:VirtualBox-5.2.8-121009 使用的linux版本是:Linux debian 4.9.0-7-amd64 tty 1. 开始配置 1.1:打开虚拟机设置,打开你 ...
- SpringBoot实战(二)Restful风格API接口
在上一篇SpringBoot实战(一)HelloWorld的基础上,编写一个Restful风格的API接口: 1.根据MVC原则,创建一个简单的目录结构,包括controller和entity,分别创 ...
- weak和alias
一.强符号和弱符号 在C语言中,如果多个模块定义同名全局符号时,链接器认为函数和已初始化的全局变量(包括显示初始化为0)是强符号,未初始化的全局变量是弱符号. 根据这个定义,Linux链接器使用下面的 ...
- OO问题
设计一个在线的酒店预订系统,并且可以通过城市搜索出来 解决办法: Main Class: User Room Hotel Booking Adress Enums : 房间的状态和类型 public ...
- Android蓝牙技术Bluetooth使用流程(具体解释)
一:蓝牙设备之间的通信主要包含了四个步骤 设置蓝牙设备 寻找局域网内可能或者匹配的设备 连接设备 设备之间的传输数据 二:详细编程实现 1. 启动蓝牙功能 首先通过调用静态方法getDefaultAd ...
- EBS OAF开发中怎样通过ReferenceAO进行验证
EBS OAF开发中怎样通过ReferenceAO进行验证 (版权声明.本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) Reference AO 除了用于 ...
- C++友元(Friend)简介
相对Java而言,友元是C++中特有的一种元素,再加上<C++ Primer>也并没有太具体的样例,所以刚接触这个概念的时候懵了非常久,即是自己总结一下,也希望能帮到大家,以下来讲讲友元的 ...
- HDU 3652 B-number(数位dp&记忆化搜索)
题目链接:[kuangbin带你飞]专题十五 数位DP G - B-number 题意 求1-n的范围里含有13且能被13整除的数字的个数. 思路 首先,了解这样一个式子:a%m == ((b%m)* ...
- C&C控制服务的设计和侦测方法综述——DDoS攻击,上传从宿主机偷窃的到的信息,定时给感染机文件加密勒索等。
这篇文章总结了一些我在安全工作里见到过的千奇百怪的C&C控制服务器的设计方法以及对应的侦测方法,在每个C&C控制服务先介绍黑帽部分即针对不同目的的C&C服务器设计方法,再介绍白 ...