在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
- **综合应用**:利用JavaScript制作一个功能完善的日历控件。 #### 第四部分:综合应用——建立你自己的网站 **第二十三章:建立你自己的网站** - **项目规划**:确定网站的目标和内容。 - **设计布局**:使用...
### .NET自学案例知识点概述 #### 一、窗体基本操作 **知识点1:窗体的基本用法** - **描述**:本节介绍如何创建、显示和关闭窗体。 - **实现方法**: - 创建一个新的窗体实例。 - 使用`Show()`方法显示窗体。 -...
【高等教育自学考试全统考课程新编或修订的考试大纲教材宣贯】 高等教育自学考试是一项全国统一的高等教育形式,旨在为非在校人员提供提升学历的机会。考试大纲和教材是自学考试的重要组成部分,它们规定了考试内容...
### SAP BC410 课程中文自学笔记知识点总结 #### 一、课程概览与目标 - **课程名称**:SAP BC410 - 开发用户对话 - **目标**: - 编写动态屏幕处理程序 - 使用SAP系统中的不同屏幕元素编写用户会话 - **学习成果*...
### 数学建模竞赛+自学指导建议 #### 一、数学建模竞赛概述与自学指导建议 ##### 数学建模简介: 数学建模是指通过抽象实际问题为数学问题,运用数学的方法来解决实际问题的过程。它广泛应用于科学研究、工程技术...
98王码自学教材 作者: 王永民出版社: 气象出版社 出版年: 1999ISBN:7-5029-2674-7 简介: 全书分为四个部分,第一部分介绍了"98版五笔字型"的基础知识;第二部分是本书的核心,"五笔字型"的编码规则及学习"诀窍"都在这...
db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用...
# Java开源项目之「自学编程之路」 ## 简介 「自学编程之路」是一个致力于 Java 编程学习的开源项目,提供了全面的学习指南、面试指南、资源分享和技术文章,帮助自学者快速掌握 Java 编程技术。这一项目整合了从...
本资源包含了高等教育自学考试《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开发项目了。
在JavaScript的世界中,动画和控件的实现是前端...总之,"自己写的js动画等控件类"是一个宝贵的自学资源,它可以帮助开发者提升JavaScript动画和控件开发的专业技能,并且能够激发创新思维,创造出更丰富的用户体验。
本自学文档主要介绍了Spring MVC的基本概念和核心组件,适合初学者掌握其基本工作原理。 1. DispatcherServlet(前端控制器) DispatcherServlet是Spring MVC的入口点,它充当着整个框架的前端控制器角色。在web....
作为“javascript实例自学手册”的一部分,这个压缩包包含486个实例,旨在帮助初学者通过实践来理解和掌握JavaScript的核心概念。 1. **基础语法** - 变量声明:在JavaScript中,我们使用`var`、`let`或`const`来...
这个“自学javascript教程”提供了全面的学习路径,帮助初学者从零开始掌握JavaScript的核心概念和技术。以下是对24个PPT内容的详细概述: 1. **PPT1:JavaScript简介** - 介绍JavaScript的历史、作用以及它与HTML...
### C#完全自学手册电子图书 – 第4章 Windows窗体常用控件 #### 4.1 Windows窗体 **窗体(Form)**是Windows桌面应用程序的基础构建单元。它本质上是一块空白画布,开发人员可以在此基础上添加各种控件以创建用户...
【Eclipse RCP 插件开发自学教程 (Eclipse3.6)】 Eclipse RCP (Rich Client Platform) 是一个框架,允许开发者构建高度可定制和可扩展的桌面应用程序。本教程是针对Eclipse 3.6版本的,提供了一个详细的学习路径,...
标题中的“日语学习网站自学很好用”表明这是一个关于利用在线资源进行日语自我学习的讨论。描述简单地推荐了这些资源,暗示它们对于想要学习日语的人来说是实用且有效的。 从标签“日语”我们可以确认这个话题是...