Mvc分页扩展类 分页代码 带跳转
public static class HtmlPager
{
public static MvcHtmlString MvcPager(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 StringBuilder();
StringBuilder urlformat = new StringBuilder();//url地址
foreach (string item in dict.Keys)
{
urlformat.Append("/" + dict[item].ToString());
}
urlformat.Append("?");
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
{
//获取 ~/Page/{page number} 的页号参数
if (dict.ContainsKey(currentPageStr))
int.TryParse(dict[currentPageStr].ToString(), out currentPage);
}
foreach (string item in queryString.Keys)
{
if (item != currentPageStr)
{
urlformat.Append(item + "=" + queryString[item].ToString() + "&");
}
}
urlformat.Append(currentPageStr + "=");
string strUrlformat = urlformat.ToString();
//保留查询字符到下一页
foreach (string key in queryString.Keys)
dict[key] = queryString[key]; //如果有需要,保留表单值到下一页 (我暂时不需要, 所以注释掉)
//var formValue = html.ViewContext.HttpContext.Request.Form;
//foreach (string key in formValue.Keys)
// if (formValue[key] != null && !string.IsNullOrEmpty(key))
// dict[key] = formValue[key]; if (currentPage <= 0) currentPage = 1;
if (totalPages > 0)
{
output.AppendFormat("共{0}页 ", totalPages);//这个统计加不加都行
//if (currentPage != 1)//第一页时不显示
//{
//处理首页连接 永远显示
//dict[currentPageStr] = 1;
//output.AppendFormat("{0} ", html.RouteLink("首页", dict));
output.Append("<a href='" + urlformat + "1'>首页</a>");
//}
if (currentPage > 1)
{
//处理上一页的连接
//dict[currentPageStr] = currentPage - 1;
//output.Append(html.RouteLink("上一页", dict));
output.Append("<a href='" + strUrlformat + (currentPage - 1) + "'>上一页</a>");
}
else
{
output.Append("<a href='javascript:void(0);'>上一页</a>");
//output.Append("上一页");
}
output.Append(" ");
int currint = 2;
for (int i = 0; i <= 4; i++)
{
//一共最多显示5个页码,前面2个,后面2个
if ((currentPage + i - currint) >= 1 && (currentPage + i - currint) <= totalPages)
if (currint == i)
{
//当前页处理
output.Append(string.Format("<a class='Cur01' href='javascript:void(0);'>{0}</a>", currentPage));
//output.Append(string.Format("[{0}]", currentPage));
}
else
{
//一般页处理
//dict[currentPageStr] = currentPage + i - currint;
//output.Append(html.RouteLink((currentPage + i - currint).ToString(), dict));
output.Append("<a href='" + strUrlformat + (currentPage + i - currint) + "'>" + (currentPage + i - currint) + "</a>");
}
output.Append(" ");
}
if (currentPage < totalPages)
{
//处理下一页的链接
//dict[currentPageStr] = currentPage + 1;
//output.Append(html.RouteLink("下一页", dict));
output.Append("<a href='" + strUrlformat + (currentPage + 1) + "'>下一页</a>");
}
else
{
output.Append("<a href='javascript:void(0);'>下一页</a>");
//output.Append("下一页");
}
output.Append(" ");
//if (currentPage != totalPages)//最后一页时不显示
//{
//dict[currentPageStr] = totalPages;
//output.Append(html.RouteLink("尾页", dict));
output.Append("<a href='" + strUrlformat + (totalPages) + "'>尾页</a>");
//}
output.Append(" ");
//output.AppendFormat("{0} / {1}", currentPage, totalPages);//这个统计加不加都行 output.Append(html.TextBox("JumpPage", null, new { Class = "TJump", onkeydown = "return EnterPress(event)" }));
output.Append(" ");
output.Append("<input type='button' value='Go' id='btnJump' data-maxpages='" + totalPages + "' data-urlformat='" + HttpContext.Current.Server.HtmlEncode(strUrlformat) + "' onclick='return gotopage()' />");
}
string rtnStr = output.ToString();
string flagStr = @"[\?&]page=1(?!\d)";//?!负声明,涵义:括号中的模式必须不出现在声明右侧
rtnStr = Regex.Replace(rtnStr, flagStr, "");
return new MvcHtmlString(rtnStr);
}
}
function gotopage() { var pagetarget = $("#JumpPage").val(); var r = new RegExp("^\\s*(\\d+)\\s*$"); if (!r.test(pagetarget)) { alert("请输入有效数字!"); return; } else if (RegExp.$1 < 1 || RegExp.$1 > parseInt($("#btnJump").attr("data-maxpages"))) { alert("超出范围!"); return; } else { location.href = decodeURI($("#btnJump").attr("data-urlformat") + pagetarget) } }
@Html.MvcPager("page", pageSize, count)
Mvc分页扩展类 分页代码 带跳转的更多相关文章
- MVC HtmlHelper扩展——实现分页功能
MVC HtmlHelper扩展类(PagingHelper) using System; using System.Collections.Generic; using System.Collect ...
- 分页 工具类 前后台代码 Java JavaScript (ajax) 实现 讲解
[博客园cnblogs笔者m-yb原创, 转载请加本文博客链接,笔者github: https://github.com/mayangbo666,公众号aandb7,QQ群927113708]http ...
- 【WH】MVC数据分页扩展类
public static class QueryableExtensions { #region 内存分页 /// <summary> /// 返回对象分页列表 /// </sum ...
- tornado自定义分页扩展
一.分页扩展类 #! /usr/bin/env python # -*- coding:utf-8 -*- # __author__ = "TKQ" class Paginatio ...
- ASP.NET MVC 数据分页思想及解决方案代码
作为一个程序猿,数据分页是每个人都会遇到的问题.解决方案更是琳琅满目,花样百出.但基本的思想都是差不多的. 下面给大家分享一个简单的分页器,让初学者了解一下最简单的分页思想,以及在ASP.NET MV ...
- yii2分页扩展之实现跳转到具体某页
作者:白狼 出处:http://www.manks.top/yii2_linkpager_widget.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文 ...
- ASP.NET MVC4 HtmlHelper扩展类,实现分页功能 @Html.ShowPageNavigate
本文主要做了一个HtmHelper类的分页扩展函数,方便在视图中调用,有需要的朋友可以参考一下,希望对大家有所帮助. 1.扩展HtmlHelper类方法ShowPageNavigate output. ...
- 【asp.net mvc】 扩展 htmlhelper 实现分页
参考文档:http://www.cnblogs.com/caofangsheng/p/5670071.html http://www.cnblogs.com/arte ...
- MVC下分页的自定义分页一种实现
1.引言 在MVC开发中我们经常会对数据进行分页的展示.通过分页我们可以从服务端获取指定的数据来进行展示.这样既节约了数据库查询的时间也节约了网络传输的数据量.在MVC开发中使用的比较多的应该是MVC ...
随机推荐
- ActiveMQ学习笔记(5)——使用Spring JMS收发消息
摘要 ActiveMQ学习笔记(四)http://my.oschina.net/xiaoxishan/blog/380446 中记录了如何使用原生的方式从ActiveMQ中收发消息.可以看出,每次 ...
- spring-mybatis jar下载地址
http://central.maven.org/maven2/org/mybatis/mybatis-spring/1.3.0/
- nginx支持pathinfo并且隐藏index.php
How To Set Nginx Support PATHINFO URL Model And Hide The /index.php/ 就像这样 The URL before setting lik ...
- 在JSP中使用JavaBean
//创建一个PersonBean类 public class PersonBean { private String name; private int age; public Pe ...
- css学习中的一些英文单词
indent 缩进 through通过 decoration装饰 position定位
- ubuntu apt 安装
1. ./autogen.sh: libtoolize: not found sudo apt-get install aptitude sudo aptitude install libtool 2 ...
- Mysql分库分表方案
Mysql分库分表方案 1.为什么要分表: 当一张表的数据达到几千万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了.分表的目的就在于此,减小数据库的负担,缩短查询时间. m ...
- css3 animation动画特效插件的巧用
这一个是css3 animation动画特效在线演示的网站 https://daneden.github.io/animate.css/ 下载 animate.css文件,文件的代码很多,不过要明白 ...
- Beta-1阶段成员贡献分(代组长更新)
组名:天天向上 组长:王森 小组成员:张金生.张政.林莉.胡丽娜 小组贡献分如下:王森5.2 张金生5.1 张政 5.0 林莉 4.9 胡丽娜 4.8 成员得分如下: 成员 基础分 表现分 ...
- 在VisualStudio2012环境下安装ArcEngine 10.0
因为ArcEngine10.0默认对应的开发工具为VS2010,在安装了VS2012的情况下安装ArcEngine10.0(注意:我自己的环境为VS2012和ArcEngine10.0,对于其他版本在 ...