自学MVC(十):自己写的通用的JS分页控件-2009年05月27日
2009-06-20 15:25
253 查看
在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>
第一个版本,有刷新 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>
相关文章推荐
- 自己开发的一款基于PagedDataSource的datalist repeater控件,只需要在源程序中添加三行代码,即可实现通用分页
- 使用amaze ui的分页样式封装一个通用的JS分页控件
- KingPager,自己做的分页控件,纯JS,支持所有语言
- 分享自己写的纯JS(jQuery)分页控件,也希望高手给予优化
- js实现数据加载分页功能的实现(通用)
- c# asp.net 自己写的分页 没有使用控件原始分页
- 自己动手,打造数据库通用查询控件(using c#)
- 一个优秀的Asp.Net2.0通用分页控件--PagerDataSource
- Asp.net中SQL/Oracle通用分页控件(摘抄)
- 【自然框架】js版的QuickPager分页控件 V2.0
- 【自然框架】js版的QuickPager分页控件 V2.0
- 自己编写的操作实体类的分页控件, 实现页码层与数据库的具体的信息隔离
- 项目组自己编写的js分页标签(百度分页)
- 自己写的一个分页控件(WinForm)
- 一个相当独立的.通用分页控件c#源码三(downmoon收集)
- 自己开发的ASP.NET分页控件2.0 (Ling.Pager)
- asp.net 分页-自己写分页控件
- 提供一份简单的通用分页控件源码
- 通用分页控件(DataGrid,DataList,Repeater都可以用它来分页)
- Asp.net中SQL/Oracle通用分页控件