一、新建一个空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. HDU-5009 Paint Pearls 动态规划 双向链表

    题目链接:https://cn.vjudge.net/problem/HDU-5009 题意 给一串序列,可以任意分割多次序列,每次分割的代价是被分割区间中的数字种数. 求分割区间的最小代价.n< ...

  2. [USACO16DEC]Cities and States省市

    题目:洛谷P3405. 题目大意:给你一些省市的名称(大写)和所在省的名称(两个大写字母),求有多少对城市满足:A城市的名字的前两个字母等于B城市所在省的名称,且A所在省的名称等于B城市的名字的前两个 ...

  3. centeros 7开机自动挂载磁盘

    场景: 使用mount命令将新发现的磁盘/dev/sdb挂载给/liu后,但是重启后又看不到磁盘? 问题导致原因: 虽然我们可以使用mount命令去挂载磁盘,但是此操作只对服务器运行期间有效,也就是临 ...

  4. Vue组件开发 -- Markdown

    利用marked 和 highlight.js开发markdown组件 实现效果图如下: markdown组件已这种形式<Markdown v-model="markdown" ...

  5. [Transducer] Create a Sequence Helper to Transduce Without Changing Collection Types

    A frequent use case when transducing is to apply a transformation to items without changing the type ...

  6. 程序员之---C语言细节12(指针和数组细节,&quot;//&quot;的可移植性说明)

    主要内容:指针和数组细节,"//"的可移植性说明 #include <stdio.h> int main(int argc, char **argv) { int a[ ...

  7. Session原理、安全以及最基本的Express和Redis实现

    Session原理.安全以及最基本的Express和Redis实现 https://segmentfault.com/a/1190000002630691

  8. Linux-php7安装redis

    Linux-php7安装redis 标签(空格分隔): 未分类 安装redis服务 1 下载redis cd /usr/local/ 进入安装目录 wget http://download.redis ...

  9. Wow C++11

    什么是C++11? 一句话C++11是最新的C++标准,在2011年发布,所以叫C++11.在新的标准出现前,我们一直在用的是C++98,可想而知这份标准是1998年发布的,之后再2003年最过小的修 ...

  10. 无滚动条GridView少量图片展示

    import android.content.Context; import android.util.AttributeSet; import android.util.Log; import an ...