MVc分页【关于使用扩展方法实现MVc分页】
近期对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分页】的更多相关文章
- ASP.NET MVC学前篇之扩展方法、链式编程
ASP.NET MVC学前篇之扩展方法.链式编程 前言 目的没有别的,就是介绍几点在ASP.NETMVC 用到C#语言特性,还有一些其他琐碎的知识点,强行的划分一个范围的话,只能说都跟MVC有关,有的 ...
- Asp.Net MVC以 JSON传值扩展方法
Asp.Net在客户端和服务器端,以JSON形式相互传值,可写扩展方法,用到的类型如下: DataContractJsonSerializer类: 该类在System.Runtime.Serializ ...
- Asp.Net MVC以JSON传值扩展方法
Asp.Net在客户端和服务器端,以JSON形式相互传值,可写扩展方法,用到的类型如下: DataContractJsonSerializer类: 该类在System.Runtime.Serializ ...
- ASP.NET MVC HtmlHelper 类的扩展方法
再ASP.NET MVC编程中用到了R语法,在View页面编辑HTML标签的时候,ASP.NET MVC 为我们准备好了可以辅助我们写这些标签的办法,它们就是HtmlHelper.微软官方地址是:ht ...
- 爱上MVC~为CheckBoxFor和RadioButtonFor加个扩展方法吧(希望MVC5把这方法收纳——呵呵)
回到目录 说在前 我都是喜欢把问题复杂化,还有总是喜欢把问题简单化,偷懒化,这也需就是一个程序员的追求吧,呵呵. 我不太喜欢重复的东西,当你看到页面上有一个以上相同的代码时,那可以说,你的代码有重构的 ...
- MvcPager 概述 MvcPager 分页示例 — 标准Ajax分页 对SEO进行优化的ajax分页 (支持asp.net mvc)
该示例演示如何使用MvcPager最基本的Ajax分页模式. 使用AjaxHelper的Pager扩展方法来实现Ajax分页,使用Ajax分页模式时,必须至少指定MvcAjaxOptions的Upda ...
- linq to sql 扩展方法
老赵的博客:http://blog.zhaojie.me/2008/02/using-translate-method-and-modify-command-text-before-query-in- ...
- Mvc 分页栏扩展方法
using System; using System.Collections.Generic; using System.Reflection; using System.Text; using Sy ...
- MVC分页控件之二,为IQueryable定义一个扩展方法,直接反回PagedList<T>结果集(转)
namespace Entity { public interface IPagedList { /// <summary> /// 记录数 /// </summary> in ...
随机推荐
- 【BZOJ2067】[Poi2004]SZN 二分+树上贪心
[BZOJ2067][Poi2004]SZN Description String-Toys joint-stock 公司需要你帮他们解决一个问题. 他们想制造一个没有环的连通图模型. 每个图都是由一 ...
- Imageview如何设置背景颜色
ImageView.setBackgroundColor(android.graphics.Color.parseColor("#ffffff")); ImageView.setB ...
- json序列化懒加载问题
如果框架使用了json序列化对象,当配置了hibernate懒加载时,可能会抛出异常,或者出现N+1的问题,或者出现无限循环的问题.网上很多解决方案, 基本是这些:@JsonIgnore忽略可能出问题 ...
- KDevelop使用笔记【中文教程】
*师从官方文档: https://userbase.kde.org/KDevelop4/Manual/zh-cn https://docs.kde.org/trunk5/en/extragear-kd ...
- ORACLE内存结构之SGA
SGA的管理: SQL> show parameter sga NAME TYPE VALUE ---------- ...
- 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 ...
- The Personal Touch Client Identification 个性化接触 客户识别
w服务器要知道和谁在交谈. HTTP The Definitive Guide Web servers may talk to thousands of different clients simul ...
- react setstate
1.prevstate参数 https://segmentfault.com/q/1010000008177874 2.不是实时渲染 http://bbs.reactnative.cn/topic/3 ...
- librosa音频特征提取,python librosa库在centos上依赖llvm的问题?
win10下安装使用: https://blog.csdn.net/qq_39516859/article/details/80679718 https://blog.csdn.net/qq_3951 ...
- 日志输出:控制台和log文件输出日志
self_log.py 中 import os import logging import time # 如果日志文件夹不存在,则创建 log_dir = "log" # 日志存放 ...