近期对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. php实现简单的权限管理

    今天主要来实现一个权限管理系统,它主要是为了给不同的用户设定不同的权限,从而实现不同权限的用户登录之后使用的功能不一样,首先先看下数据库 总共有5张表,qx_user,qx_rules和qx_jues ...

  2. 如何用原生js替换字符串中的某个字符(或字符串)为指定的字符串?

    <html> <head><title>我的第一个 HTML 页面</title></head><script type=" ...

  3. js/vue 高德地图绘制驾车路线图

    地图容器: // css要给此容器设置宽高 <div class="map_container"></div> 画图 data{ return { Clng ...

  4. 移动端1px细线解决方案--利用transform缩放方式

    移动端1px会显示为2px; 解决方式很多,这里介绍比较常用的一种方式--css的transform属性缩放 1. 上边框 相当于 border-top <div class="bor ...

  5. java面向对象基础回顾

    (49)  (0) 面向对象 啥是面向对象 什么是多态多态的机制 接口和抽象类区别 个人理解 代码实现 面向对象 学习java大家接触到的最多的话语无非就是面向对象,可能大家没有仔细研究过这个问题,但 ...

  6. Code Forces 22B Bargaining Table

    B. Bargaining Table time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  7. 2017-2018-2 20165330 实验三《敏捷开发与XP实现》实验报告

    实验内容 P基础 XP核心实践 相关工具 实验步骤 (一)敏捷开发与XP 软件开发:即将软件需求分析.软件设计.软件构建.软件测试和软件维护这些相关技术和过程统一到一个体系中 敏捷开发:是一种以人为核 ...

  8. HTML中简单实现文件的一键上传的操作

    在html中实现文件上传的方式为form表单中使用input type="file"控件,但是这个控件往往显示不是美观,影响页面效果,这时候,一般就通过一键上传的操作,来实现点击一 ...

  9. oracle 归档空间满的解决办法

    问题现象: 通过命令提示符登陆数据库,一般提示“ora-03113:通信通道的文件结尾”错误,查看trace日志,可以看到详细信息.部分摘录如下(橙色部分给出了建议方案): Errors in fil ...

  10. 年假小 Plan

    Learn 董伟明 课程 https://www.pycourses.com/ Learn 500 Lines or Less https://github.com/HT524/500LineorLe ...