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 ...
随机推荐
- Python开发的简单记事本
---恢复内容开始--- 主要是利用python 自带的tkinter 库 程序的基于python3.0以上 ,各个平台都可以使用包括linux ,windows , ...
- java jar打包命令使用
用法:jar {ctxu}[vfm0Mi] [jar-文件] [manifest-文件] [-C 目录] 文件名 ... 选项: -c 创建新的存档 -t 列出存档内容的列表 -x 展开存档中的命名的 ...
- hdfs的HA集群搭建的相关配置
前期准备就不详细说了 .修改Linux主机名 .修改IP .修改主机名和IP的映射关系 ######注意######如果你们公司是租用的服务器或是使用的云主机(如华为用主机.阿里云主机等) /etc/ ...
- 2015 Multi-University Training Contest 1 Assignment
Assignment Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- 【转】 C# DEBUG 调试信息打印及输出详解
[转] C# DEBUG 调试信息打印及输出详解 1.debug只在[debug模式下才执行](运行按钮后面的下拉框可选) 2.debug提供了许多调试指令,如断言 System.D ...
- Mysql 日期型,索引查询的问题
问题: 表中,有一个日期字段WorkDate(Date YYYY-MM-DD格式),现在我把它建成了索引,在检索条件时,WorkDate='YYYY-MM-DD' 时,用EXPLAIN分析,能看到使用 ...
- Hello World FastCGI
什么是FastCGI,google吧,測试一个用C++实现的FastCGI程序. 1, Nginx 安装.http://nginx.org/en/download.html.下载解压.configur ...
- jquery去重
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...
- Func委托和Action委托
http://stackoverflow.com/questions/4317479/func-vs-action-vs-predicate The difference between Func a ...
- php中的页面跳转和重定向
php中的页面跳转和重定向 ThinkPHP中跳转和重定向的区别 跳转: 浏览器认为: 当前URL请求成功, 重新请求新的URL. 浏览器会 记录当前的URL 和 新的URL 在请求历史记录中. 回退 ...