Asp.net MVC 简单分页:

 
public static string Pager(int page,int pageSize,int total)
        {
            var htmlStr = "<div class=\"pagination\">";
            var pageCount = Math.Ceiling((double)total / pageSize);
            var request = HttpContext.Current.Request;
            var url = request.RawUrl;
            if (url.IndexOf("page") < 0)
            {
                if (url.IndexOf('?') < 0)
                {
                    url += "?page={0}";
                }
                else
                {
                    url += "&page={0}";
                }
            }
            else
            {
                url = Regex.Replace(url,@"page=\d*", "page={0}");
            }
            if (url.IndexOf("pageSize") < 0)
            {
                if (url.IndexOf('?') < 0)
                {
                    url += "?pageSize={1}";
                }
                else
                {
                    url += "&pageSize={1}";
                }
            }
            else
            {
                url = Regex.Replace(url, @"pageSize=\d*", "pageSize={1}");
            }
            var perEveryTime = 5;//每次显示可点击页数
            var urlTmp = "";
            var count = 0;
            var paginationPreTemplate = "<span class=\"pagination-link pagination-prev\"><a href=\"{0}\">{1}</a></span>";
            var paginationNextTemplate = "<span class=\"pagination-link pagination-next\"><a href=\"{0}\">{1}</a></span>";
            var paginationLinkTemplate = "<span class=\"pagination-link\"><a href=\"{0}\">{1}</a></span>";
            var paginationCurrentTemplate = "<span class=\"pagination-current\">{0}</span>";
            var paginationDotsTemplate = "<span class=\"pagination-link\">...</span>";
            if (page > 1)//前一页
            {
                urlTmp = string.Format(url, page - 1, pageSize);
                htmlStr += string.Format(paginationPreTemplate, urlTmp, "<");
            }
            if (pageCount <= perEveryTime)//将所有页面展示出来
            {
                for (var i = 1; i <= pageCount; i++)
                {
                    if (i == page)
                    {
                        htmlStr += string.Format(paginationCurrentTemplate, page);
                    }
                    else
                    {
                        urlTmp = string.Format(url, i, pageSize);
                        htmlStr += string.Format(paginationLinkTemplate, urlTmp, i);
                    }
                }
            }
            else//只展示perEveryTime个页面,并采用:p1+...+p2p3p4+...p5,的形式
            {
                if (page - 1 <= 2)//不需要加第一个“...”
                {
                    for (var i = 1; i <= page; i++)
                    {
                        if (i == page)
                        {
                            htmlStr += string.Format(paginationCurrentTemplate,page);
                        }
                        else
                        {
                            urlTmp = string.Format(url, i, pageSize);
                            htmlStr += string.Format(paginationLinkTemplate, urlTmp, i);
                        }
                    }
                    count += page;
                }
                else//加第一个“...”
                {
                    urlTmp = string.Format(url, 1, pageSize);
                    htmlStr += string.Format(paginationLinkTemplate, urlTmp, 1);
                    htmlStr += paginationDotsTemplate;
                    urlTmp = string.Format(url, page-1, pageSize);
                    htmlStr += string.Format(paginationLinkTemplate, urlTmp, (page - 1));
                    htmlStr += string.Format(paginationCurrentTemplate, page);
                    count += 3;
                }
                if (pageCount-page <= 2)//不需要加第二个“...”
                {
                    for (var i = page+1; i <= pageCount; i++)
                    {
                        if (i == page)
                        {
                            htmlStr += string.Format(paginationCurrentTemplate, page);
                        }
                        else
                        {
                            urlTmp = string.Format(url, i, pageSize);
                            htmlStr += string.Format(paginationLinkTemplate, urlTmp, i);
                        }
                    }
                }
                else
                {
                   
                    urlTmp = string.Format(url, page+1, pageSize);
                    htmlStr += string.Format(paginationLinkTemplate, urlTmp, page + 1);
                    count++;
                    htmlStr += paginationDotsTemplate;
                    for (var i = pageCount - (perEveryTime-count)+1; i <= pageCount; i++)
                    {
                        urlTmp = string.Format(url, i, pageSize);
                        htmlStr += string.Format(paginationLinkTemplate, urlTmp, i);
                    }
                }
            }
            if (page < pageCount)//后一页
            {
                urlTmp = string.Format(url, page + 1, pageSize);
                htmlStr += string.Format(paginationNextTemplate, urlTmp, ">");
            }
            htmlStr += "</div>";
            return htmlStr;
        }
 
调用:
后台:var t = HtmlHelper2.Pager(page, pageSize, users.Count);
ViewBag.t = t;
 前台:
@Html.Raw(ViewBat.t)
 
 
<style type="text/css">
/* Pagination */
.pagination {text-align:center;padding:0 0 40px;font-family: 'ProximaNovaT-Thin';}
.pagination a,
.pagination a:link,
.pagination a:visited {font-size:20px;color:#999;height:28px;line-height:28px;width:23px;text-align:center;display:inline-block;border-radius:15px;margin:0px 2px;}
.pagination a:focus,
.pagination a:hover,
.pagination a:active {color:#3498db;}
.pagination-link {color:#bbb;}
.pagination-prevk {margin-right:10px;color:#aaa;}
.pagination-next {margin-left:10px;color:#aaa;}
.pagination-current {background:#999;color:#fff;font-family: 'ProximaNovaT-Thin';height:28px;line-height:30px;width:28px;text-align:center;display:inline-block;border-radius:15px;margin:0 2px;}
</style>
 

Asp.net MVC 简单分页 自做简单分页的更多相关文章

  1. ASP.NET MVC 4 插件化架构简单实现-思路篇

    用过和做过插件的都会了解插件的好处,园子里也有很多和讨论,但大都只些简单的加载程序集什么的,这里主要讨论的就是使用 ASP.NET MVC 4 来实现每个插件都可以完全从主站点剥离出来,即使只是一个插 ...

  2. ASP.NET MVC 4 插件化架构简单实现-实例篇

    先回顾一下上篇决定的做法: 1.定义程序集搜索目录(临时目录). 2.将要使用的各种程序集(插件)复制到该目录. 3.加载临时目录中的程序集. 4.定义模板引擎的搜索路径. 5.在模板引擎的查找页面方 ...

  3. Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理

    这是本人第一次写,写的不好的地方还忘包含.写这个的主要原因是想通过这个来学习下EF的CodeFirst模式,本来也想用AngularJs来玩玩的,但是自己只会普通的绑定,对指令这些不是很熟悉,所以就基 ...

  4. Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理6

    接下来先做角色这一板块的(增删改查),首先要新建一个Role控制器,在添加一个RoleList的视图.表格打算采用的是bootstrap的表格. using System; using System. ...

  5. 使用asp.net mvc + entityframework + sqlServer 搭建一个简单的code first项目

    步骤: 1. 创建一个asp.net mvc 项目 1.1 项目创建好结构如下 2 通过vs安装EntityFramework框架 install-package entityframework 3. ...

  6. asp.net mvc 简易通用自定义Pager实现分页

    asp.net mvc 自定义Pager实现分页 Intro 一个WEB应用程序中经常会用到数据分页,本文将实现一个简单通用的分页组件,包含一个 PagerModel (用来保存页码信息),一个 Ht ...

  7. 让Asp.net mvc WebAPI 支持OData协议进行分页查询操作

    这是我在用Asp.net mvc WebAPI 支持 OData协议 做分页查询服务时的 个人拙笔. 代码已经开发到oschina上.有兴趣的朋友可以看看,欢迎大家指出不足之处. 看过了园子里的几篇关 ...

  8. 转:ASP.NET MVC利用TryUpdateModel来做资料更新 (一)

    前言有使用 ASP.NET MVC 的朋友们一定多多少少有听过 TryUpdateModel,之前就看了很多有关它的文章,但在专案实务上都未曾实际使用过,而 TryUpdateModel 不仅能利用 ...

  9. 转:ASP.NET MVC利用TryUpdateModel来做资料更新 (二)

    前言 第一篇說明了 TryUpdateModel 的簡單的應用,除了可指定更新的欄位之外也可排除更新特定的欄位,而因為可搭配 Metadata 做欄位驗證為資料又做了一層把關,但在 ASP.NET M ...

随机推荐

  1. ionic小白的学习路之目录结构分析、创建组件、创建页面、页面跳转

    一. 目录结构分析 hooks:编译cordova 时自定义的脚本命令,方便整合到我们的编译系统和版本控制系统中. node_modules :node 各类依赖包. resources :andro ...

  2. JS简单实现防抖和节流

    一.什么是防抖和节流 Ps: 比如搜索框,用户在输入的时候使用change事件去调用搜索,如果用户每一次输入都去搜索的话,那得消耗多大的服务器资源,即使你的服务器资源很强大,也不带这么玩的. 1. 防 ...

  3. 数的计数(noip2001,动态规划递推)

    题目链接: 普通版: https://www.luogu.org/problemnew/show/P1028 数据加强版: https://www.luogu.org/problemnew/show/ ...

  4. MySQL丨02丨忘记root用户密码怎么办?

    软件:Mysql 版本:8.0.13 1. 先暂停mysql的服务,方法是在cmd里输入如下代码: net stop mysql 2. 在安装文件夹下创建一个文件:mysql-ini.txt (我的安 ...

  5. (7) 将tomcat HTTP连接器启动在80端口(jsvc使用详解)

    让tomcat在80端口上运行 法一: 修改连接器的端口8080为80 <Connector port="8080" protocol="HTTP/1.1" ...

  6. 生成优惠券,并将优惠券存入Mysql

    #coding:utf-8 import random import string import MySQLdb def gen_charint(filename, width =4, num=5): ...

  7. LeetCode(100) Same Tree

    题目 Given two binary trees, write a function to check if they are equal or not. Two binary trees are ...

  8. ES6(对象扩展)

    ES6(对象(object)新增特性) 1.简介表示法 o,k 为属性:这种为无方法的情况. 这种为有方法. 2.属性表达式 ES6中,[a]就是 b . 3.新增API 1.数组也是引用类型 2.O ...

  9. winform中ComboBox控件的简单使用

    在开发winform中用到了ComboBox,但是发现和asp.net中的DropDownList差别比我想象中的大. 给ComboBox添加数据总结的有两种方法(绑定数据库在这里不说): 第一种方法 ...

  10. 【Ajax 3】JavaScript封装Ajax

    导读:上一篇博客简单介绍了一下对Ajax中的核心对象XMLHttpRequest的封装.那么为了方便对Ajax的应用,我们还需要进一步的对Ajax的基本功能进行下一步的封装,不得不说的是早就有人专门写 ...