近期对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. 【BZOJ2067】[Poi2004]SZN 二分+树上贪心

    [BZOJ2067][Poi2004]SZN Description String-Toys joint-stock 公司需要你帮他们解决一个问题. 他们想制造一个没有环的连通图模型. 每个图都是由一 ...

  2. Imageview如何设置背景颜色

    ImageView.setBackgroundColor(android.graphics.Color.parseColor("#ffffff")); ImageView.setB ...

  3. json序列化懒加载问题

    如果框架使用了json序列化对象,当配置了hibernate懒加载时,可能会抛出异常,或者出现N+1的问题,或者出现无限循环的问题.网上很多解决方案, 基本是这些:@JsonIgnore忽略可能出问题 ...

  4. KDevelop使用笔记【中文教程】

    *师从官方文档: https://userbase.kde.org/KDevelop4/Manual/zh-cn https://docs.kde.org/trunk5/en/extragear-kd ...

  5. ORACLE内存结构之SGA

    SGA的管理: SQL> show parameter sga NAME                                 TYPE        VALUE ---------- ...

  6. netty/example/src/main/java/io/netty/example/http/snoop/

    netty/example/src/main/java/io/netty/example/http/snoop at 4.1 · netty/netty https://github.com/nett ...

  7. The Personal Touch Client Identification 个性化接触 客户识别

    w服务器要知道和谁在交谈. HTTP The Definitive Guide Web servers may talk to thousands of different clients simul ...

  8. react setstate

    1.prevstate参数 https://segmentfault.com/q/1010000008177874 2.不是实时渲染 http://bbs.reactnative.cn/topic/3 ...

  9. librosa音频特征提取,python librosa库在centos上依赖llvm的问题?

    win10下安装使用: https://blog.csdn.net/qq_39516859/article/details/80679718 https://blog.csdn.net/qq_3951 ...

  10. 日志输出:控制台和log文件输出日志

    self_log.py 中 import os import logging import time # 如果日志文件夹不存在,则创建 log_dir = "log" # 日志存放 ...