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 ...
随机推荐
- 100 Door Puzzle
问题重述: There are 100 doors in a long hallway. They are all closed. The first time you walk by each do ...
- 在 node.js 的 express web 框架中自动注册路由
该方法主要是动态注册自己写的 router . 注册器 router 文件名为 loader.js . var express = require('express'); var fs = requ ...
- NFC学习 (1)
NFC Smart Poster: 放入NFC TAG的都是Smart Poster Advantage: 1.在展示动态内容方面有低功耗的优势: 2.容易扩展容量: 3.容易修改内容(修改后台或者 ...
- java中String、stringbuilder、stringbuffer区别
1.可变与不可变 String类中使用字符数组保存字符串,如下就是,因为有"final"修饰符,所以可以知道string对象是不可变的.每次对String对象进行改变的时候其实都等 ...
- sqlserver存取过程游标
ALTER proc [dbo].[common_proc_temp2] as begin declare @id varchar(50); declare @cbcontractid varchar ...
- CentOS7安装问题及解决方案记录
CentOS7系统已安装好: 一.我想要实现系统桌面化. 需要运行 yum 命令. 出现第一个error: 1.提示错误:can not find a valid baseurl 86_X64.... ...
- SqlServer传输数据到ORACLE,SSIS
一.配置32位ODBC 配置tnsname文件,增加ORACLE数据库 打开32位ODBC 二.创建一个PROJECT并配置数据源 1.创建一个project 三.数据传输SSIS,工作流 四.为DT ...
- Rust的几个预测
写程序多年,语言也用过不下十种,对于Rust有种亲人的感觉,就像在梦中见到过似的.现在对于Rust特做出以下一些预测,希望Rust会有更大的影响力. 1. 当前的Rust的核心功能现以比较稳定,可以用 ...
- jquery的hide()和show()
jquery用hide()和show()函数来控制html元素的显示和隐藏. hide()和show()都可以带参数的,hide(1000)表示隐藏所需的时间为1秒.此外还可以用slow,fast参数 ...
- VMware Workstation+Linux+Xshell+Xftp+MySQL+SQLyog 配置
这些天在搞这些个东西做项目,配置较繁,这里记下安装过程中的要点. 1.VMware Workstation 主要是 NAT 方式联网的问题,详述如下,来自网络. NAT 配置那里注意网关,虚拟机中网关 ...