在asp.net webform 里有很多分页控件,比如aspnetpager等.然后在mvc开发模式下,这些控件不太合适了,所以我就自己写了一个.
第一个版本,有刷新 htmlhelper版:
这里用了c#3.0里的扩展方法.
public static class CutePage
{
/// <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 = 1; //当前页
var totalPages = Math.Max((totalCount + pageSize - 1) / pageSize, 1); //总页数
var dict = new System.Web.Routing.RouteValueDictionary(html.ViewContext.RouteData.Values);
var output = new System.Text.StringBuilder();
if (!string.IsNullOrEmpty(queryString[currentPageStr]))
{
//与相应的QueryString绑定
foreach (string key in queryString.Keys)
if (queryString[key] != null && !string.IsNullOrEmpty(key))
dict[key] = queryString[key];
int.TryParse(queryString[currentPageStr], out currentPage);
}
else
{
//如果是第一次访问本页,没有currentPageStr参数,添加currentPageStr=1
if (!dict.ContainsKey(currentPageStr))
{
dict.Add(currentPageStr, 1);
}
int.TryParse(dict[currentPageStr].ToString(), out currentPage);
}
if (currentPage <= 0) currentPage = 1;
if (totalPages > 1)
{
if (currentPage != 1)
{
//处理首页连接
dict[currentPageStr] = 1;
output.AppendFormat("{0} ", html.RouteLink("首页", dict));
}
if (currentPage > 1)
{
//处理上一页的连接
dict[currentPageStr] = currentPage - 1;
output.Append(html.RouteLink("上页", dict));
}
else
{
output.Append("上页");
}
output.Append(" ");
int currint = 5;
for (int i = 0; i <= 10; i++)
{
//一共最多显示10个页码,前面5个,后面5个
if ((currentPage + i - currint) >= 1 && (currentPage + i - currint) <= totalPages)
if (currint == i)
{
//当前页处理
output.Append(string.Format("{0}", currentPage));
}
else
{
//一般页处理
dict[currentPageStr] = currentPage + i - currint;
output.Append(html.RouteLink((currentPage + i - currint).ToString(), dict));
}
output.Append(" ");
}
if (currentPage < totalPages)
{
//处理下一页的链接
dict[currentPageStr] = currentPage + 1;
output.Append(html.RouteLink("下页", dict));
}
else
{
output.Append("下页");
}
output.Append(" ");
if (currentPage != totalPages)
{
dict[currentPageStr] = totalPages;
output.Append(html.RouteLink("末页", dict));
}
output.Append(" ");
}
output.AppendFormat("{0} / {1}", currentPage, totalPages);//这个统计加不加都行
return output.ToString();
}
}
在页面上的调用方式 <%= Html.Pager("pageindex",10,itemscout)%>
当然我下面要隆重推出无刷新Jquery版的分页控件:
/*生成分页导航
pageindex--当前页索引
pageSize --每页多少行数据
totalCount--总行数
ajaxMethod--jquery写的无刷新获取数据的js方法
target---分页在页面输出的页面元素,比如<div>里
*/
function initePageNav(pageindex,pageSize,totalCount,ajaxMethod,target) {
var currentPage =pageindex+1; //当前页
var totalPages = parseInt((totalCount + pageSize - 1) / pageSize); //总页数
var output="";
output += "第" + ((currentPage - 1) * pageSize + 1) + "-" + currentPage * pageSize + "条 " + "共" + totalCount + "条";
output += " ";
if (currentPage <= 0) currentPage = 1;
if (totalPages > 1)
{
if (currentPage != 1)
{
//处理首页连接
output += "<a href=\"javascript:" + ajaxMethod + "(0)\">首页</a>";
}
output += " ";
if (currentPage > 1)
{
//处理上一页的连接
output += "<a href=\"javascript:" + ajaxMethod + "(" + (currentPage - 2) + ")\">上页</a>";
}
else
{
output+="上页";
}
output += " | ";
var currint = 5;
for (var i = 0; i <= 10; i++)
{
//一共最多显示10个页码,前面5个,后面5个
if ((currentPage + i - currint) >= 1 && (currentPage + i - currint) <= totalPages)
if (currint == i)
{
//当前页处理
output += currentPage;
output += " ";
}
else
{
//一般页处理
output += "<a href=\"javascript:" + ajaxMethod + "(" + (currentPage + i - currint - 1) + ")\">" + (currentPage + i - currint) + "</a>";
output += " ";
}
}
if (currentPage < totalPages)
{
//处理下一页的链接
output += "| <a href=\"javascript:" + ajaxMethod + "(" + (currentPage) + ")\">下页</a>";
}
else
{
output += "| 下页";
}
output += " ";
if (currentPage != totalPages)
{
output+="<a href=\"javascript:"+ajaxMethod+"("+(totalPages-1)+")\">末页</a>";
}
output += " </span>";
}
if (totalCount>0)
{
$("#"+target).text("");
$("#" + target).append(output);
}
}
这个函数配合无刷新取数据的方法如下使用:
<script language="javascript">
$().ready(function() {
//页面初始化时获取评论内容
getComments(0);
});
//获取评论内容
function getComments(pageindex) {
$.post("http://www.cnblogs.com/Services/GetComments.ashx", { Mid: <%= Model.Mid %>, PageIndex: pageindex, PageSize: 10},
function(data, textStatus) {
$("#videobodycommentlist").text("");//先清空页面数据的内容
$("#videobodycommentlist").append(data.result);//把获取好的数据填充
initePageNav(pageindex,10,data.count,"getComments","commentPage");//调用JS分页方法
}, "json");
}
</script>
<!--v:3.2-->
分享到:
相关推荐
ERP系统信息化资料:自学SAP教材资料CO--Suntech 配置文档Configuration Manual V01.doc
全国高等教育自学考试精神障碍护理学试题课程代码:03009(5)课稿-15页.pdf
广东省高等教育自学考试项目范围管理课程(课程代码:05060)考试大纲复习过程-13页.pdf
98王码自学教材 作者: 王永民出版社: 气象出版社 出版年: 1999ISBN:7-5029-2674-7 简介: 全书分为四个部分,第一部分介绍了"98版五笔字型"的基础知识;第二部分是本书的核心,"五笔字型"的编码规则及学习"诀窍"都在这...
大学生自学网站 计算机类全部,机械类,土木建筑类,财经管类 ,电气类,法 学类 ,广告类� ,医学,心理学,大学英语,大学物理,高等数学, 大学化学,哲学 应有尽有) 计算机类 数据结构 (37 课时) ...
葵花宝典-WPF自学手册 葵花宝典-WPF自学手册 葵花宝典-WPF自学手册
db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用...
本资源包含了高等教育自学考试《C++程序设计》(课程代码:04737)2000年10月至2009年1月的各次正考、增考的全国试卷及其参考答案。 注: (1) 这门课程的前身是《面向对象程序设计》(课程代码:02328),直到...
8:判断输入文本是否全是半角空格js 9:java中金额的精确计算问题 10:有关继承的要点 11:有关继承的问题 12;有关static、final的基本规则 13:有关数组的知识点 14:数组的拷贝 15:数组中插入法实现排序 16:Object类 ...
自学mvc的最好的资料,配有教学视频,学习资料,以及附带了一个mvc项目实例,可以一边做项目,一边学习mvc可以全面学习mvc,学习完这个网址的全部东西,相信你的mvc可以去公司用mvc开发项目了。
2004年4月-2009年4月全国高等教育自学考试概率论与数理统计二.pdf
2021年下半年广西高等教育自学考试转考申请时间:8月21日-27日.docx
全国2009年1月-2010年1月高等教育自学考试高等数学(工本)试题
程序天下:JavaScript实例自学手册PDF
1.在有互连的开放系统中,位于同一水平行(同一层)上的系统构成了 OSI 的( )层 2.令牌总线网中( ) 3.TCP 采用( )来实现流量控制和阻塞控制 4
全国2009年1月高等教育自学考试C++程序设计试题课程代码:04737
办案手记6~17:自学考试生的学士学位(2009年9月12日).doc
98王码自学练习册 作者: 王永民出版社: 气象出版社 出版年: 1998ISBN:7-5029-2600-3 简介: 本练习册是与《98王码自学教材》紧密结合的,学到哪一章节该做哪个练习,教材中都有明确的要求。
JavaScript实例自学手册:通过486个例子掌握.net开发捷径