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 ...
随机推荐
- SQL SELECT SET
SELECT SET 同时对多个变量同时赋值时 支持 不支持 表达式返回多个值时 将返回的最后一个值赋给变量 出错 表达式未返回值时 变量保持原值 变量被赋null值
- 学习C:程序
#include <stdio.h> main(){ /*将输入复制到输出,并将其中连续的多个空格用一个空格代替*/ int c,nb; nb = 0; while((c = getcha ...
- 《转》iOS音频视频初级开发
代码改变世界 Posts - 73, Articles - 0, Comments - 1539 Cnblogs Dashboard Logout HOME CONTACT GALLERY RSS ...
- kindeditor多图片上传找不到action原来是private File upload成员变量惹得祸
kindeditor多图片上传找不到action原来是private File upload成员变量惹得祸
- 信鸽推送(XGPush)
先放入两个链接: iOS信鸽接入官方文档:http://developer.qq.com/wiki/xg/iOS接入/iOS%20SDK完整接入/iOS%20SDK完整接入.html 信鸽开放平台:h ...
- centos rar安装
wget http://www.rarsoft.com/rar/rarlinux-x64-5.1.1.tar.gz tar -zxvf rarlinux-x64-5.1.1.tar.gz # cd r ...
- Win32 RGB三原色
以前看到三原色的图案,一直很好奇是如何画出来.后来终于搞清楚了,其实很简单,实际上就是RGB三个分量的"位与"运算. 下面给出Win32绘制三原色图案的例子,特此记录在此: #in ...
- jquery 中substring,substr,split的用法
substring 方法 返回位于 String 对象中指定位置的子字符串. strVariable.substring(start, end) 参数 start 指明子字符串的起始位置,该索引从 0 ...
- String类字符串截取示范
package it.com; // 要求:對字符串“jflksjdfnbalkdfjnbaddddnbahhuhnbauuuuahnbahdfunbadhfudf”进行检索:判断有多少个nba; / ...
- XmlDocument解析Soap格式文件案例:
private static string Analysis(string strResult) { var doc = new System.Xml.XmlDocument(); //加载soap文 ...