asp.net mvc 的几种分页Pager
第一种
/// <summary>
/// 分页Pager显示
/// </summary>
/// <param name="html"></param>
/// <param name="currentPageStr">标识当前页码的QueryStringKey</param>
/// <param name="pageSize">每页显示</param>
/// <param name="totalCount">总数据量</param>
/// <returns></returns>
public static string Pager(this HtmlHelper html, string currentPageStr, int pageSize, int totalCount)
{
var queryString = html.ViewContext.HttpContext.Request.QueryString;
int currentPage = ; //当前页
int.TryParse(queryString[currentPageStr], out currentPage); //与相应的QueryString绑定
var totalPages = Math.Max((totalCount + pageSize - ) / pageSize, ); //总页数
var dict = new RouteValueDictionary(html.ViewContext.RouteData.Values);
var output = new StringBuilder();
foreach (string key in queryString.Keys)
if (queryString[key] != null && !string.IsNullOrEmpty(key))
dict[key] = queryString[key];
if (totalPages > )
{
if (currentPage != )
{//处理首页连接
dict["p"] = ;
output.AppendFormat("{0} ", html.RouteLink("首页", dict));
}
if (currentPage > )
{//处理上一页的连接
dict["p"] = currentPage - ;
output.Append(html.RouteLink("上一页", dict));
}
else
{
output.Append("上一页");
}
output.Append(" ");
int currint = ;
for (int i = ; i <= ; i++)
{//一共最多显示10个页码,前面5个,后面5个
if ((currentPage + i - currint) >= && (currentPage + i - currint) <= totalPages)
if (currint == i)
{//当前页处理
output.Append(string.Format("[{0}]", currentPage));
}
else
{//一般页处理
dict["p"] = currentPage + i - currint;
output.Append(html.RouteLink((currentPage + i - currint).ToString(), dict));
}
output.Append(" ");
}
if (currentPage < totalPages)
{//处理下一页的链接
dict["p"] = currentPage + ;
output.Append(html.RouteLink("下一页", dict));
}
else
{
output.Append("下一页");
}
output.Append(" ");
if (currentPage != totalPages)
{
dict["p"] = totalPages;
output.Append(html.RouteLink("末页", dict));
}
output.Append(" ");
}
output.AppendFormat("{0} / {1}", currentPage, totalPages);//这个统计加不加都行
return output.ToString();
}
第二个
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using System.Collections.Specialized;
using System.Web.Routing;
namespace System.Web.Mvc
{
public static class PagerHelper
{
///
/// 分页
///
///
/// 分页id
/// 当前页
/// 分页尺寸
/// 记录总数
/// 分页头标签属性
/// 分页样式
/// 分页模式
///
public static string Pager(this HtmlHelper helper, string id, int currentPageIndex, int pageSize, int recordCount, object htmlAttributes, string className, PageMode mode)
{
TagBuilder builder = new TagBuilder("div");
builder.IdAttributeDotReplacement = "_";
builder.GenerateId(id);
builder.MergeAttributes(new RouteValueDictionary(htmlAttributes));
builder.InnerHtml = GetNormalPage(helper, currentPageIndex, pageSize, recordCount, mode);
return builder.ToString(TagRenderMode.Normal);
}
///
/// 分页
///
///
/// 分页id
/// 当前页
/// 分页尺寸
/// 记录总数
/// 分页样式
///
public static string Pager(this HtmlHelper helper, string id, int currentPageIndex, int pageSize, int recordCount, string className)
{
return Pager(helper, id, currentPageIndex, pageSize, recordCount, null, className, PageMode.Normal);
}
///
/// 分页
///
///
/// 分页id
/// 当前页
/// 分页尺寸
/// 记录总数
///
public static string Pager(this HtmlHelper helper, string id, int currentPageIndex, int pageSize, int recordCount)
{
return Pager(helper, id, currentPageIndex, pageSize, recordCount, null);
}
///
/// 分页
///
///
/// 分页id
/// 当前页
/// 分页尺寸
/// 记录总数
/// 分页模式
///
public static string Pager(this HtmlHelper helper, string id, int currentPageIndex, int pageSize, int recordCount, PageMode mode)
{
return Pager(helper, id, currentPageIndex, pageSize, recordCount, null, mode);
}
///
/// 分页
///
///
/// 分页id
/// 当前页
/// 分页尺寸
/// 记录总数
/// 分页样式
/// 分页模式
///
public static string Pager(this HtmlHelper helper, string id, int currentPageIndex, int pageSize, int recordCount, string className, PageMode mode)
{
return Pager(helper, id, currentPageIndex, pageSize, recordCount, null, className, mode);
}
///
/// 获取普通分页
///
///
///
///
///
private static string GetNormalPage(this HtmlHelper helper, int currentPageIndex, int pageSize, int recordCount, PageMode mode)
{
int pageCount = (recordCount % pageSize == ? recordCount / pageSize : recordCount / pageSize + );
string url = HttpContext.Current.Request.Url.AbsolutePath + "?page={0}";
string HtmlStr = string.Empty;
NameValueCollection collection = HttpContext.Current.Request.QueryString;
string[] keys = collection.AllKeys;
for (int i = ; i < keys.Length; i++)
{
if (keys[i].ToLower() != "page")
url += "&" + keys[i] + "=" + collection[keys[i]] + "";
}
HtmlStr += "<div class=\"right maunlist\" style=\"width: 520px; float:right;\">";
HtmlStr += "<div class=\"left manur\" style=\"float:right\">";
HtmlStr += "<div class=\"manudisableda\">到第</div>";
HtmlStr += "<div class=\"manudisableda\"><input name=\"\" type=\"text\" id=\"page\" style=\"width:40px; margin-top:2px\"/></div>";
HtmlStr += "<div class=\"manudisableda\">页</div><div class=\"manudisableda\"><a href=\"#\"><img id=\"queding\" src=\"../../list_img/OKBTN.jpg\" width=\"70\" height=\"24\" /></a></div></div>";
// HtmlStr += "<tr><td>总共" + recordCount + "条记录,共" + pageCount + "页,当前第" + currentPageIndex + "页 </td>";
HtmlStr += "<div class=\"left manuleft\" style=\"float:right;\">";
//if (currentPageIndex == 1)
// HtmlStr += "<a>首页</a> ";
//else
//{
// string url1 = string.Format(url.ToString(), 1);
// HtmlStr += "<a href=\"" + url1 + "\">首页</a> ";
//}
if (currentPageIndex > )
{
string url1 = string.Format(url.ToString(), currentPageIndex - );
HtmlStr += "<a href=\"" + url1 + "\">上一页</a> ";
}
else
HtmlStr += "<span class=\"pageNum\">上一页</span> ";
if (mode == PageMode.Numeric)
HtmlStr += GetNumericPage(currentPageIndex, pageSize, recordCount, pageCount, url.ToString());
if (currentPageIndex < pageCount)
{
string url1 = string.Format(url.ToString(), currentPageIndex + );
HtmlStr += "<a href=\"" + url1 + "\">下一页</a> ";
}
else
HtmlStr += "<span class=\"pageNum\">下一页</span> ";
//if (currentPageIndex == pageCount)
// HtmlStr += "末页 ";
//else
//{
// string url1 = string.Format(url.ToString(), pageCount);
// HtmlStr += "<a href=\"" + url1 + "\">末页</a> ";
//}
HtmlStr += "</div>";
HtmlStr += "</div>";
return HtmlStr.ToString();
}
///
/// 获取数字分页
///
///
///
///
///
///
///
private static string GetNumericPage(int currentPageIndex, int pageSize, int recordCount, int pageCount, string url)
{
int page = ;
int count = pageCount % page == ? pageCount / page : (pageCount / page + );
int k = currentPageIndex / page;
int m = currentPageIndex % page;
string sbhtml = string.Empty;
//当前在第几个分页上
int index = currentPageIndex % page == ? currentPageIndex / page : (currentPageIndex / page + );
if (index != )
{
sbhtml += "<span>...</span>";
}
if (currentPageIndex / page == pageCount / page)
{
if (m == )
{
k--;
m = page;
}
else
m = pageCount % page;
}
else
if (m == )
{
k--;
m = page;
}
else
{
m = ;
}
for (int i = k * page + ; i <= k * page + m; i++)
{
if (i == currentPageIndex)
sbhtml += "<font class=\"pagertion\">" + string.Format("{0} ", i) + "</font>";
else
{
string url1 = string.Format(url.ToString(), i);
sbhtml += "<a href=\"" + url1 + "\">" + string.Format("{1} ", url1, i) + "</a>";
}
}
if (count > )
{
if (index < count)
{
sbhtml += "<span>...</span>";
}
}
return sbhtml.ToString();
}
}
///
/// 分页模式
///
public enum PageMode
{
///
/// 普通分页模式
///
Normal,
///
/// 普通分页加数字分页
///
Numeric
}
}
asp.net mvc 的几种分页Pager的更多相关文章
- Asp.Net中的三种分页方式
Asp.Net中的三种分页方式 通常分页有3种方法,分别是asp.net自带的数据显示空间如GridView等自带的分页,第三方分页控件如aspnetpager,存储过程分页等. 第一种:使用Grid ...
- asp.net mvc 中 一种简单的 URL 重写
asp.net mvc 中 一种简单的 URL 重写 Intro 在项目中想增加一个公告的功能,但是又不想直接用默认带的那种路由,感觉好low逼,想弄成那种伪静态化的路由 (别问我为什么不直接静态化, ...
- ASP.NET MVC中有四种过滤器类型
在ASP.NET MVC中有四种过滤器类型
- ASP.NET MVC Filters 4种默认过滤器的使用【附示例】 数据库常见死锁原因及处理 .NET源码中的链表 多线程下C#如何保证线程安全? .net实现支付宝在线支付 彻头彻尾理解单例模式与多线程 App.Config详解及读写操作 判断客户端是iOS还是Android,判断是不是在微信浏览器打开
ASP.NET MVC Filters 4种默认过滤器的使用[附示例] 过滤器(Filters)的出现使得我们可以在ASP.NET MVC程序里更好的控制浏览器请求过来的URL,不是每个请求都会响 ...
- ASP.NET MVC Filters 4种默认过滤器的使用【附示例】
过滤器(Filters)的出现使得我们可以在ASP.NET MVC程序里更好的控制浏览器请求过来的URL,不是每个请求都会响应内容,只响应特定内容给那些有特定权限的用户,过滤器理论上有以下功能: 判断 ...
- 认识ASP.NET MVC的5种AuthorizationFilter
在总体介绍了筛选器及其提供机制(<深入探讨ASP.NET MVC的筛选器>)之后,我们按照执行的先后顺序对四种不同的筛选器进行单独介绍,首先来介绍最先执行的AuthorizationFil ...
- Asp.Net中的三种分页方式总结
本人ASP.net初学,网上找了一些分页的资料,看到这篇文章,没看到作者在名字,我转了你的文章,只为我可以用的时候方便查看,2010的文章了,不知道这技术是否过期. 以下才是正文 通常分页有3种方法, ...
- Asp.Net MVC结合ExtJs gridPanel 分页和高度自适应
Ext.onReady(function () { gridPanel(); var panel = Ext.getCmp('gridPanel'); window.onresize = functi ...
- Asp.Net MVC EasyUI DataGrid查询分页
function doSearch() { //查询方法 var searchValue = $('#txtQueryTC001').textbox('getText'); $('#dgCMSTC') ...
随机推荐
- java数字保留两位小数四舍五入
import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; public c ...
- Educational Codeforces Round 5 - C. The Labyrinth (dfs联通块操作)
题目链接:http://codeforces.com/contest/616/problem/C 题意就是 给你一个n行m列的图,让你求’*‘这个元素上下左右相连的连续的’.‘有多少(本身也算一个), ...
- javabean总结
一. javabean 是什么? Bean的中文含义是“豆子”,顾名思义,JavaBean是指一段特殊的Java类, 就是有默然构造方法,只有get,set的方法的java类的对象. 专业点解释是: ...
- 用Rufus来制作Windows10的U盘安装盘
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:用Rufus来制作Windows10的U盘安装盘.
- springMVC部署
一.导入springMVC所需要的jar包 下载地址:http://repo.spring.io/release/org/springframework/spring/ 二.springM ...
- Python3学习
要做一个儿童搜索引擎的项目(www.kidsearch.cn),所以开始接触各种新的语言,初步学了PHP爬虫,觉得要做大点的项目用PHP确实不太方便,中文兼容性就是一个比较棘手的问题.python的爬 ...
- php-fpm 启动和关闭
php-fpm -c /data/tools/repository/php-5.3.10/etc/php.ini -y /data/tools/repository/php-5.3.10/etc/ph ...
- Oracle数据库的版本变迁功能对比
Oracle数据库自发布至今,也经历了一个从不稳定到稳定,从功能简单至强大的过程.从第二版开始,Oracle的每一次版本变迁,都具有里程碑意义. 1979年的夏季,RSI(Oracle公司的前身,Re ...
- opencv 手势识别
我使用OpenCV2.4.4的windows版本+Qt4.8.3+VS2010的编译器做了一个手势识别的小程序. 本程序主要使到了Opencv的特征训练库和最基本的图像处理的知识,包括肤色检测等等. ...
- QM课程03-采购中的质量管理
QM模块被包含于采购过程的下列决策制定阶段:查询.供应商选择.采购订单.货物订单.收货.收到检查和收货数量的下达. 供应商下达 质量部门为一种被指定的物料下达一个供应商,它可以限制或限定下达的数量.如 ...