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)

时间: 2024-11-05 21:43:09

Mvc分页扩展类 分页代码 带跳转的相关文章

分页 工具类 前后台代码 Java JavaScript (ajax) 实现 讲解

[博客园cnblogs笔者m-yb原创, 转载请加本文博客链接,笔者github: https://github.com/mayangbo666,公众号aandb7,QQ群927113708]https://www.cnblogs.com/m-yb/p/9986309.html分页功能的实现可以使用各种插件, 笔者今日闲来无事, 写了 分页工具类 前后台代码 Java JavaScript 的 实现及思路梳理.供大家参考.分页功能的需求一般有: 当前页/每页条数/总页数/总记录数/起始记录数/数

ASP.NET MVC 数据分页思想及解决方案代码

作为一个程序猿,数据分页是每个人都会遇到的问题.解决方案更是琳琅满目,花样百出.但基本的思想都是差不多的. 下面给大家分享一个简单的分页器,让初学者了解一下最简单的分页思想,以及在ASP.NET MVC中的简单实现与应用. 一,定义分页器类 在ASP.NET MVC中,分页的数据源可能是各种不同的类型,所以最好使用泛型来定义. public class PagingHelper<T> 二,基本三要素 实现分页人所共知的三个基本属性: DataSource:数据源,要知道数据源共计多少条数据,会

yii2分页扩展之实现跳转到具体某页

先上图看效果,样式虽然有点丑,这都不重要,我相信拿到代码的你们更注重的是这功能怎么实现的! 从上图中不难看出,我们制定跳转到某页的功能是基于linkpager之上的扩展,这根我们之前实现的分页扩展明显不同,之前的明显就是重写了!当然,这都不重要,我们看看GoLinkPager的具体实现!名字起的有点lower,不重要! 1.在frontend\components目录新建GoLinkPager类文件 2.该类继承yii\widgets\LinkPager;,如下: namespace front

MVC下分页的自定义分页一种实现

1.引言 在MVC开发中我们经常会对数据进行分页的展示.通过分页我们可以从服务端获取指定的数据来进行展示.这样既节约了数据库查询的时间也节约了网络传输的数据量.在MVC开发中使用的比较多的应该是MVCPager控件.这个控件提供无刷新分页等功能.虽然我们有这么好的控件可以使用,但是我们还是需要通过简单的例子来看一下原始的分页技术的雏形,学习下原始分页的技术实现. 2.简单的分页实现 此处使用T_Products表查询商品数据,然后进行展示.商品类定义如下: public sealed class

MVC如何使用开源分页插件shenniu.pager.js

最近比较忙,前期忙公司手机端接口项目,各种开发+调试+发布现在几乎上线无问题了:虽然公司项目忙不过在期间抽空做了两件个人觉得有意义的事情,一者使用aspnetcore开发了个人线上项目(要说线上其实只能ip访问,没有域名哈哈),其架构组成由:aspnetcore1.0.0+redis+ postgressql+TaskMainForm服务,这个项目在后期会开源出来供大家分享学习,站点地址点这里心声网:一者是目前正在做的后台管理框架一叶子,现目前刚好吧js分页插件shenniu.pager.js写

MVC默认路由实现分页-PagerExtend.dll

这两天在群里有人咨询有没有现成的.net mvc分页方法,由此写了一个简单分页工具,这里简单分享下实现思路,代码,希望能对大家有些帮助,鼓励大家多造些轮子还是好的. A.效果(这里用了bootstrap的样式) B.分析,知识点 a.分页通常由一下几个属性组成(当前页,总条数,分页记录数,路由地址),由此四项基本就能实现分页了,在加上一个控制样式的参数 b.各种数字的验证,计算总页数(如果总条数和分页记录数不能整除,那么最后相除的结果再+1) c.下一页和上一下的按钮是零界点,需要判断是否是最后

mvc,EntityFramework调用分页存储过程

此文讲述mvc4+entityframework6+sqlserver2008环境下调用存储过程,实现分页. 1.分页存储过程代码如下: 分页原理用的row_number()和over()函数实现(没有用top.not in,因为性能低). SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[Procedure_SpiltPage] ( @pageIndex INT =1, --页索引 @pageSize INT =10, --页大小 @tab

Java Web的分页工具类

最近写一个java web项目,以前分页的工具类,都是基础架构的人写好了的.也没有去细看,现在遇到这个状况. 就整理一下思路,自己写了一个分页的工具类.写的不好之处,还望斧正. 下面是我的代码: PageUtil.java 1 package util; 2 3 import java.util.Map; 4 5 /** 6 * 分页工具类 7 * @author lyh 8 * 9 */ 10 public class PageUtil { 11 private int total; //总数

C# 表达式树分页扩展(三)

一.前言 前面我们知道了表达树的基本知识,也明白了怎么遍历和修改一个表达式,这里我们就一个实际的场景来进行功能开发. 表达式系列目录 C# 表达式树讲解(一) C# 表达式树遍历(二) 二.分页扩展 在实际的开发中,肯定会遇到这样的应用场景,一个数据源需要在页面上进行分页显示,并且页面上需要对该数据源有一个排名.本来分页可以在数据库层面完成,但是因为这里有一个排名功能,所谓的排名,就是需要查询出所有满足条件的数据,然后按照某个算法升序或者降序排列,然后按照进行排名.排名之后,然后根据分页信息,将