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 ...
随机推荐
- poj_1125 Floyd最短路
题目大意 N个股票经纪人,每个股票经纪人都会将得到的消息传播给另外一些股票经纪人,传播的速度均不固定,且从A传到B的速度和B传到A的速度不一定相等.给定一个消息,并不一定能够传遍所有的股票经纪人,因为 ...
- jquery树形菜单
转自:http://keleyi.com/dev/3068696139522ae4.htm 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1 ...
- AntiSamy测试
AntiSamy为owasp针对xss提供的处理库,可以配置xml策略来决定过滤的内容,比如标签.属性.css等,自定义策略给开发人员使用成本比较高,AntiSamy也提供了几个内置的策略,其安全级别 ...
- 申请startssl免费一年ssl证书(转)
原文:http://www.live-in.org/archives/1296.html 申请过程步骤蛮多的,对于像我这样的小白来说还是截图+文字记录下比较好.浏览器是firefox. 1.打开htt ...
- Python的15个坑
1. 不要使用可变对象作为函数默认值 代码如下: In [1]: def append_to_list(value, def_list=[]): ...: def_list.ap ...
- volatile变量,java内存模型
volatile变量提供了最轻量级的同步机制,当一个变量加上volatile修饰时,会具有一下两个特性 https://blog.csdn.net/u011277123/article/details ...
- Spark 2.2 DataFrame的一些算子操作
Spark Session中的DataFrame类似于一张关系型数据表.在关系型数据库中对单表或进行的查询操作,在DataFrame中都可以通过调用其API接口来实现. 可以参考,Scala提供的Da ...
- ambari关于ranger的一个大坑----端口永远是3306,需要手动修改
ambari关于ranger的一个大坑----端口永远是3306 这个坑是我在搭建ambari环境的时候发现的,我并没有找到原因,求助同事,然后一步步循着蛛丝马迹和试探,终于解决了,然而也揭露了amb ...
- POJO,简单的Java对象
POJO = "Plain Ordinary Java Object",简单的Java对象,是为了避免和EJB混淆所创造的简称,是MartinFowler等发明的一个术语,用来表示 ...
- Java队列存储结构及实现
一.队列(Queue) 队列是一种特殊的线性表,它只允许在表的前段(front)进行删除操作,只允许在表的后端(rear)进行插入操作.进行插入操作的端称为队尾,进行删除操作的端称为队头. 对于一个队 ...