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 ...
随机推荐
- layerui如何设置显示的位置?
转自:http://www.layui.com/doc/modules/layer.html#offset layer.open({ type: 1,//默认:0 (0表示信息框,1表示页面层,2表示 ...
- linux下如何启动nginx?
命令: /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ........... [root@localhost sbin ...
- log4j日志服务器配置
可参考的文章: http://www.jb51.net/article/89597.htm http://www.jb51.net/article/41001.htm http://liuzhijun ...
- vue下登录页背景图上下空白处自适应等高
遇到需求,登录页面需要顶部和底部上下等高,并且随着浏览器自适应上下高度. 解决方法: vue界面的data中先定义 data() { return { windowHeight: "&quo ...
- MapReduce分区和排序
一.排序 排序: 需求:根据用户每月使用的流量按照使用的流量多少排序 接口-->WritableCompareable 排序操作在hadoop中属于默认的行为.默认按照字典殊勋排序. 排序的分类 ...
- 【c++】生成浮点随机数
c++11:std::uniform_real_distribution<>直接求(尖括号不填默认生成double) 随机10个在1-2之间的浮点数 #include <random ...
- Mysql2索引
索引分类: 作用:优化查询,select查询有三种情况:缓存查询(不在mysql中进行数据查询),全表查询,索引扫描 Btree(btree b+tree b*tree) Rtree HASH Ful ...
- python基础之小数据池、代码块、编码
一.代码块.if True: print(333) print(666) while 1: a = 1 b = 2 print(a+b) for i in '12324354': print(i) 虽 ...
- mysql 约束条件 auto_increment 自动增长 创建表时设置自增字段
auto_increment mysql) )auto_increment; Query OK, rows affected (0.01 sec) mysql> show create tabl ...
- 详解MySQL第二篇—DML语句
DML 语句: DML 操作是指对数据库中表记录的操作,主要包括表记录的插入(insert).更新(update).删除(delete)和查(select),是开发人员日常使用最频繁的操作.下面将依次 ...