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') ...
随机推荐
- oracle 的rowid和rownum
rowid就是唯一标志记录物理位置的一个id,对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行 ...
- 【Android】Handler的应用(三):从服务器端分页加载更新ListView
在前面两节中,我们了解了如何从服务器中加载JSON数据. 现在,我们将把服务器中的JSON数据加载更新到ListView. 并且,结合之前博文的 “动态追加分页ListView数据”的相关知识,实现 ...
- ASMB的BUG(ORA-04030 kfmditer)导致数据库宕机
ASMB的BUG(ORA-04030 kfmditer)导致数据库宕机 现象: 客户的一个重要生产系统RAC的一个实例宕机,查看alert日志: Fri Jun 21 17:05:52 2013 Er ...
- sqlserver表分区与调优与行列转换
转自: http://www.cnblogs.com/knowledgesea/p/3696912.html http://www.open-open.com/lib/view/open1418462 ...
- 使用SVG Path绘图
最近一个项目,需要做个Web版本的设计器,用来进行工厂流水线布局的设计. 项目中采用了SVG.JS来做,但是以前流水线是采用单纯的画线的方式实现.客户提出希望用不同的底纹表示不同的流水线,经过一番调查 ...
- 关于本人遇到的nodejs的一些错误信息
window xp.win7 32位下安装node.js mongodb驱动 1.cmd->npm install mongodb 2.新建一个环境变量NODE_PATH 3.把Nodejs目录 ...
- 教你50招提升ASP.NET性能(十七):不要认为问题只会从业务层产生
(28)Don’t assume that problems can only arise from business logic 招数28: 不要认为问题只会从业务层产生 When beginnin ...
- assert
assert responseTP.length() > 0," TP response is empty, please check it "
- 文件映射spring 使用classpath方式加载hibernate映射文件
在改章节中,我们主要介绍文件映射的内容,自我感觉有个不错的建议和大家分享下 <!-- 批量指定到classpath下面 --> <property name="mappin ...
- 如何用boost::serialization去序列化派生模板类(续)
在 如何用boost::serialization去序列化派生模板类这篇文章中,介绍了序列化派生类模板类, 在写測试用例时一直出现编译错误,调了非常久也没跳出来,今天偶然试了一下...竟然调了出来. ...