一、新建一个空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的扩展分页方法的更多相关文章

  1. ASP.Net MVC开发基础学习笔记:二、HtmlHelper与扩展方法

    一.一个功能强大的页面开发辅助类—HtmlHelper初步了解 1.1 有失必有得 在ASP.Net MVC中微软并没有提供类似服务器端控件那种开发方式,毕竟微软的MVC就是传统的请求处理响应的回归. ...

  2. ASP.Net MVC开发基础学习笔记(2):HtmlHelper与扩展方法

    一.一个功能强大的页面开发辅助类—HtmlHelper初步了解 1.1 有失必有得 在ASP.Net MVC中微软并没有提供类似服务器端控件那种开发方式,毕竟微软的MVC就是传统的请求处理响应的回归. ...

  3. HtmlHelper的扩展

    HtmlHelper的扩展: 注意点:扩展方法必须是静态方法,所在的类必须是静态类,所在的命名空间改成System.Web.MVC则能省略页面中必须添加命名空间的约束. //主要就是输出分页的超级链接 ...

  4. C# 分页方法

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

  5. 只是一个用EF写的一个简单的分页方法而已

    只是一个用EF写的一个简单的分页方法而已 慢慢的写吧.比如,第一步,先把所有数据查询出来吧. //第一步. public IQueryable<UserInfo> LoadPagesFor ...

  6. Laravel 中通过自定义分页器分页方法实现伪静态分页链接以利于 SEO

    我们知道,Laravel 自带的分页器方法包含 simplePaginate 和 paginate 方法,一个返回不带页码的分页链接,另一个返回带页码的分页链接,但是这两种分页链接页码都是以带问号的动 ...

  7. 在 Laravel 中通过自定义分页器分页方法实现伪静态分页链接以利于 SEO

    我们知道,Laravel 自带的分页器方法包含 simplePaginate 和 paginate 方法,一个返回不带页码的分页链接,另一个返回带页码的分页链接,但是这两种分页链接页码都是以带问号的动 ...

  8. jquery 扩展插件方法

    分析插件jquery.countdown.js (function($) { $.fn.countdown = function(options) { // default options var d ...

  9. js 判断数组包含某值的方法 和 javascript数组扩展indexOf()方法

    var  questionId = []; var anSwerIdValue = []; ////javascript数组扩展indexOf()方法 Array.prototype.indexOf ...

随机推荐

  1. Python开发的简单记事本

    ---恢复内容开始---               主要是利用python 自带的tkinter 库    程序的基于python3.0以上 ,各个平台都可以使用包括linux ,windows , ...

  2. java jar打包命令使用

    用法:jar {ctxu}[vfm0Mi] [jar-文件] [manifest-文件] [-C 目录] 文件名 ... 选项: -c 创建新的存档 -t 列出存档内容的列表 -x 展开存档中的命名的 ...

  3. hdfs的HA集群搭建的相关配置

    前期准备就不详细说了 .修改Linux主机名 .修改IP .修改主机名和IP的映射关系 ######注意######如果你们公司是租用的服务器或是使用的云主机(如华为用主机.阿里云主机等) /etc/ ...

  4. 2015 Multi-University Training Contest 1 Assignment

    Assignment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  5. 【转】 C# DEBUG 调试信息打印及输出详解

    [转] C# DEBUG 调试信息打印及输出详解 1.debug只在[debug模式下才执行](运行按钮后面的下拉框可选) 2.debug提供了许多调试指令,如断言          System.D ...

  6. Mysql 日期型,索引查询的问题

    问题: 表中,有一个日期字段WorkDate(Date YYYY-MM-DD格式),现在我把它建成了索引,在检索条件时,WorkDate='YYYY-MM-DD' 时,用EXPLAIN分析,能看到使用 ...

  7. Hello World FastCGI

    什么是FastCGI,google吧,測试一个用C++实现的FastCGI程序. 1, Nginx 安装.http://nginx.org/en/download.html.下载解压.configur ...

  8. jquery去重

    <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...

  9. Func委托和Action委托

    http://stackoverflow.com/questions/4317479/func-vs-action-vs-predicate The difference between Func a ...

  10. php中的页面跳转和重定向

    php中的页面跳转和重定向 ThinkPHP中跳转和重定向的区别 跳转: 浏览器认为: 当前URL请求成功, 重新请求新的URL. 浏览器会 记录当前的URL 和 新的URL 在请求历史记录中. 回退 ...