近期对MVc自定义分页作了一下小研究下面把他记下来

下述代1,2,3里面的代码可以直接拷贝,4以后的根据情况自己选定

1.在后台任写如下的扩展方法(任一类库都可以,但是用时得引用命名空间)

// 添加using System.Web;     using System.Web.Mvc; 引用,找不到可以从MVC层拷贝
namespace System.Web.Mvc.Html  // 注意一定要把类的命名空间写成System.Web.Mvc.Html
{
public static class PageExtensioncs // 一定要是静态类
{
// 一定要是静态方法
public static HtmlString ShowPageNavigate(this HtmlHelper htmlHelper, int currentPage, int pageSize, int totalCount)
{ var redirectTo = htmlHelper.ViewContext.RequestContext.HttpContext.Request.Url.AbsolutePath; pageSize = pageSize == ? : pageSize; // 显示条数设置 var totalPages = Math.Max((totalCount + pageSize - ) / pageSize, ); //总页数 var output = new StringBuilder(); if (totalPages > )
{ output.AppendFormat("<a class='pageLink' href='{0}?pageIndex=1&pageSize={1}'>首页</a> ", redirectTo, pageSize); if (currentPage > )
{//处理上一页的连接 output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>上一页</a> ", redirectTo, currentPage - , pageSize); }
output.Append(" "); int currint = ; for (int i = ; i <= ; i++)
{//一共最多显示10个页码,前面5个,后面5个 if ((currentPage + i - currint) >= && (currentPage + i - currint) <= totalPages)
{ if (currint == i)
{//当前页处理 output.AppendFormat("<a class='cpb' href='{0}?pageIndex={1}&pageSize={2}'>{3}</a> ", redirectTo, currentPage, pageSize, currentPage); } else
{//一般页处理 output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>{3}</a> ", redirectTo, currentPage + i - currint, pageSize, currentPage + i - currint); } } output.Append(" ");
} if (currentPage < totalPages)
{//处理下一页的链接 output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>下一页</a> ", redirectTo, currentPage + , pageSize); }
output.Append(" "); if (currentPage != totalPages)
{ output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>末页</a> ", redirectTo, totalPages, pageSize); } output.Append(" "); } output.AppendFormat("<label>第{0}页 / 共{1}页</label>", currentPage, totalPages);//这个统计加不加都行
return new HtmlString(output.ToString()); }
}
}

2.添加分页信息类

namespace SysCommon
{
public class PagerInfo
{
/// <summary>
/// 总记录数
/// </summary>
public int RecordCount { get; set; } /// <summary>
/// 当前页码
/// </summary>
public int CurrentPageIndex { get; set; } /// <summary>
/// 显示条数
/// </summary>
public int PageSize { get; set; } }
}

3.添加泛型对像叠加类(这里的这种用法很值得学习)

namespace SysCommon
{
public class PagerQuery<TPager, TEntityList>
{ public PagerQuery(TPager pager, TEntityList entityList)
{ this.Pager = pager; this.EntityList = entityList; } public TPager Pager { get; set; } public TEntityList EntityList { get; set; } }
}

上述代1,2,3里面的代码可以直接拷贝

4.在Controller中代码如下 (注意)

        public ActionResult Index(int? pageSize,int? pageIndex)
{
List<UserInfo> list = new List<UserInfo>();
UserInfo u1 = new UserInfo { Uid=,UserName="zs",TrueName="张三"};
list.Add(u1);
UserInfo u2 = new UserInfo { Uid = , UserName = "zs2", TrueName = "张三2" };
list.Add(u2);
UserInfo u3 = new UserInfo { Uid = , UserName = "zs3", TrueName = "张三3" };
list.Add(u3);
UserInfo u4 = new UserInfo { Uid = , UserName = "zs4", TrueName = "张三4" };
list.Add(u4);
UserInfo u5 = new UserInfo { Uid = , UserName = "zs5", TrueName = "张三5" };
list.Add(u5);
UserInfo u6 = new UserInfo { Uid = , UserName = "zs6", TrueName = "张三6" };
list.Add(u6);
UserInfo u7 = new UserInfo { Uid = , UserName = "zs7", TrueName = "张三7" };
list.Add(u7);
UserInfo u8 = new UserInfo { Uid = , UserName = "zs8", TrueName = "张三8" };
list.Add(u8);
UserInfo u9 = new UserInfo { Uid = , UserName = "zs9", TrueName = "张三9" };
list.Add(u9);
UserInfo u10 = new UserInfo { Uid = , UserName = "zs10", TrueName = "张三10" };
list.Add(u10);
UserInfo u11 = new UserInfo { Uid = , UserName = "zs11", TrueName = "张三11" };
list.Add(u11);
UserInfo u12 = new UserInfo { Uid = , UserName = "zs12", TrueName = "张三12" };
list.Add(u12);
UserInfo u13 = new UserInfo { Uid = , UserName = "zs13", TrueName = "张三13" };
list.Add(u13);
UserInfo u14 = new UserInfo { Uid = , UserName = "zs14", TrueName = "张三14" };
list.Add(u14);
UserInfo u15 = new UserInfo { Uid = , UserName = "zs15", TrueName = "张三15" };
list.Add(u15);
UserInfo u16 = new UserInfo { Uid = , UserName = "zs16", TrueName = "张三16" };
list.Add(u16);
UserInfo u17 = new UserInfo { Uid = , UserName = "zs17", TrueName = "张三17" };
list.Add(u17);
UserInfo u18 = new UserInfo { Uid = , UserName = "zs18", TrueName = "张三18" };
list.Add(u18);
UserInfo u19 = new UserInfo { Uid = , UserName = "zs19", TrueName = "张三19" };
list.Add(u19);
UserInfo u20 = new UserInfo { Uid = , UserName = "zs20", TrueName = "张三20" };
list.Add(u20);
UserInfo u21 = new UserInfo { Uid = , UserName = "zs21", TrueName = "张三21" };
list.Add(u21);
UserInfo u22 = new UserInfo { Uid = , UserName = "zs22", TrueName = "张三22" };
list.Add(u22);
UserInfo u23 = new UserInfo { Uid = , UserName = "zs23", TrueName = "张三23" };
list.Add(u23);
UserInfo u24 = new UserInfo { Uid = , UserName = "zs24", TrueName = "张三24" };
list.Add(u24);
UserInfo u25 = new UserInfo { Uid = , UserName = "zs25", TrueName = "张三25" };
list.Add(u25);
UserInfo u26 = new UserInfo { Uid = , UserName = "zs26", TrueName = "张三26" };
list.Add(u26);
PagerInfo p = new PagerInfo();
int pageIndex1 = pageIndex ?? ; // 重置或获取当前页默认值
int pageSize1 = pageSize ?? ; // 重置或获取显示条数
List<UserInfo> list2 = list.Skip((pageIndex1 - ) * pageSize1).Take(pageSize1).ToList(); // 取页面显示的数据
p.PageSize = pageSize1; // 设置页码
p.RecordCount = list.Count; // 设置总记录数
p.CurrentPageIndex = pageIndex1; // 设置当前页码
// 实例化合并泛型,获取数据
PagerQuery<PagerInfo, List<UserInfo>> pgaequery = new PagerQuery<PagerInfo, List<UserInfo>>(p, list2);
return View(pgaequery); // 返回数据
}

5.View 视图中的显示代码 重点@Html.ShowPageNavigate(Model.Pager.CurrentPageIndex, Model.Pager.PageSize, Model.Pager.RecordCount)

@using SysModels
@using SysCommon
@model PagerQuery<PagerInfo,List<UserInfo>>
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
@section Head{ }
<div style=" width:100%;">
<table style="margin:0 auto;">
<thead>
<tr>
<th>用户ID</th>
<th>用户名</th>
<th>真实姓名</th>
<th>Email</th>
<th>English</th>
<th>Tell</th>
</tr>
</thead>
<tbody>
@foreach (UserInfo u in Model.EntityList)
{
<tr>
<td>@u.Uid</td>
<td>@u.UserName</td>
<td>@u.TrueName</td>
<td>@u.Email</td>
<td>@u.EnglishName</td>
<td>@u.Tell</td>
</tr>
}
</tbody>
</table>
<div class="paginator" style=" width:600px;margin:0 auto;">
@Html.ShowPageNavigate(Model.Pager.CurrentPageIndex, Model.Pager.PageSize, Model.Pager.RecordCount)
</div>
</div>

6. 可以加上样式 代码如下

<style type="text/css">
.paginator
{
font: 14px Arial, Helvetica, sans-serif;
padding: 10px 20px 10px ;
margin: 0px auto;
} .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: 20px;
line-height: 20px;
min-width: 14px;
_width: 14px;
margin-right: 5px;
text-align: center;
white-space: nowrap;
font-size: 14px;
font-family: Arial,SimSun;
padding: 3px;
} .paginator label
{
display:block;
float:left;
margin-top:4px;
} </style>

7.显示效果如下

本文原于   *滴血* 的博客,只是根据本人自己的实例做了更详细的阐述.

*滴血* 文章参考:http://www.cnblogs.com/ChengPuYuan/p/3715412.html

MVc分页【关于使用扩展方法实现MVc分页】的更多相关文章

  1. ASP.NET MVC学前篇之扩展方法、链式编程

    ASP.NET MVC学前篇之扩展方法.链式编程 前言 目的没有别的,就是介绍几点在ASP.NETMVC 用到C#语言特性,还有一些其他琐碎的知识点,强行的划分一个范围的话,只能说都跟MVC有关,有的 ...

  2. Asp.Net MVC以 JSON传值扩展方法

    Asp.Net在客户端和服务器端,以JSON形式相互传值,可写扩展方法,用到的类型如下: DataContractJsonSerializer类: 该类在System.Runtime.Serializ ...

  3. Asp.Net MVC以JSON传值扩展方法

    Asp.Net在客户端和服务器端,以JSON形式相互传值,可写扩展方法,用到的类型如下: DataContractJsonSerializer类: 该类在System.Runtime.Serializ ...

  4. ASP.NET MVC HtmlHelper 类的扩展方法

    再ASP.NET MVC编程中用到了R语法,在View页面编辑HTML标签的时候,ASP.NET MVC 为我们准备好了可以辅助我们写这些标签的办法,它们就是HtmlHelper.微软官方地址是:ht ...

  5. 爱上MVC~为CheckBoxFor和RadioButtonFor加个扩展方法吧(希望MVC5把这方法收纳——呵呵)

    回到目录 说在前 我都是喜欢把问题复杂化,还有总是喜欢把问题简单化,偷懒化,这也需就是一个程序员的追求吧,呵呵. 我不太喜欢重复的东西,当你看到页面上有一个以上相同的代码时,那可以说,你的代码有重构的 ...

  6. MvcPager 概述 MvcPager 分页示例 — 标准Ajax分页 对SEO进行优化的ajax分页 (支持asp.net mvc)

    该示例演示如何使用MvcPager最基本的Ajax分页模式. 使用AjaxHelper的Pager扩展方法来实现Ajax分页,使用Ajax分页模式时,必须至少指定MvcAjaxOptions的Upda ...

  7. linq to sql 扩展方法

    老赵的博客:http://blog.zhaojie.me/2008/02/using-translate-method-and-modify-command-text-before-query-in- ...

  8. Mvc 分页栏扩展方法

    using System; using System.Collections.Generic; using System.Reflection; using System.Text; using Sy ...

  9. MVC分页控件之二,为IQueryable定义一个扩展方法,直接反回PagedList<T>结果集(转)

    namespace Entity { public interface IPagedList { /// <summary> /// 记录数 /// </summary> in ...

随机推荐

  1. json的循环

    通过for in: var json = {width: '200px', height: '200px', background: 'green'}; var i = ''; for(i in js ...

  2. dbForge mysql数据库比对

    Comparison选项卡,新建一个表结构比较, (将source库的表结构变化应用到target库) 下面示例中,source用positec_uat,     target用positec_pro ...

  3. 解决SecureCRT连接linux终端中文显示乱码

    现象如下: 原因: SecureCRT的字符集编码不是Linux的默认编码:UTF-8 解决办法: 1.在“选项”找到“会话选项” 2.选择“外观”,设置字符编码为“UTF-8” 3.确定后,继续在终 ...

  4. Load Balancing with NGINX 负载均衡算法

    Using nginx as HTTP load balancer Using nginx as HTTP load balancer http://nginx.org/en/docs/http/lo ...

  5. 关于VFS文件系统中的superblock、inode、d_entry和file数据结构

  6. idea破解方法

    1.http://idea.lanyus.com/ 下载破解文件 2.将下载的JetbrainsIdesCrack-3.4-release-enc.jar破解文件放在idea安装目录下的bin中: 3 ...

  7. Python实现HMM(隐马尔可夫模型)

    1. 前言 隐马尔科夫HMM模型是一类重要的机器学习方法,其主要用于序列数据的分析,广泛应用于语音识别.文本翻译.序列预测.中文分词等多个领域.虽然近年来,由于RNN等深度学习方法的发展,HMM模型逐 ...

  8. 剑指Offer——字符流中第一个不重复的字符

    题目描述: 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读 ...

  9. php 计算gps坐标 距离

    在计算机或GPS上经纬度经常用度.分.秒和度.度.分.分.秒.秒的混合方式进行表示,度.分.秒间的进 制是60进制,度.度.分.分. 秒.秒的进制是100进制,换算时一定要注意.可以近似地认为每个纬度 ...

  10. Java根据IP地址获取MAC地址

    先使用ping -n  2 10.0.0.1 命令,如果返回的结果中含有TTL字符,证明ping 10.0.0.1是能ping通的,即可达的.如果在Linux机器上请使用 ping -c 2 10.0 ...