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 ...
随机推荐
- JavaScript 正则表达式的应用实例
都是自己实例记录,不断更新中.... 1.字符串找出所有匹配的邮箱并替换 <html> <body> <script type="text/javascript ...
- 笔记9-徐 DBCC SHRINKFILE不起作用的原因
1 , , , , , , , , ,40) ,1 page_id pg_alloc ext_size obj_id index_id partition_number partition_id ia ...
- poj1157LITTLE SHOP OF FLOWERS
Description You want to arrange the window of your flower shop in a most pleasant way. You have F bu ...
- css中伪元素before或after中content的特殊用法attr
html代码如下: <div class="haorooms"> <span data-haorooms="haorooms鼠标效果tips-纯css& ...
- input输入框怎么禁止粘贴
<input type="text" value="" onpaste="return false;" /> 原文出处:http ...
- 初学c# -- 学习笔记(二)
接着前面的学习,对话建立了,下面就写对话框气泡,和微信的差不多那种.尖角对话气泡网上一堆,圆尖角的修改了一个.IE8以下不能用,其他都可以用,直接上html代码,将<style>内容用到你 ...
- 发现 git忽略没用
git rm --cached GuoJiWeb/Properties/PublishProfiles/Profile1.pubxml
- loadrunner-VUserGen录制脚本及回放时注意的问题
乱码问题 1.1录制过程中的乱码(因为本机系统的编码格式跟被测系统的编码格式不一致导致): 1.2运行时的乱码(录制后的脚本编码格式跟被测系统的编码格式不一致导致): 解决:1.Tools-Recor ...
- Android根据文件路径使用File类获取文件相关信息
Android通过文件路径如何得到文件相关信息,如 文件名称,文件大小,创建时间,文件的相对路径,文件的绝对路径等: 如图: 代码: public class MainActivity extends ...
- ANDROID开发之问题积累及解决方案(二)
错误:“Binary XML file line # : Error inflating class” 原因:此异常是布局文件中有错引起的,那么返回到布局文件中看看. <?xml version ...