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. 01Ping程序的设计

    1.Ping程序设计具体设计任务 1.1 实验目的 PING程序是我们使用的比较多的用于测试网络连通性的程序.PING程序基于ICMP,使用ICMP的回送请求和回送应答来工作.由计算机网络课程知道,I ...

  2. Fortran学习记录1(Fortran数据类型)

    Fortran中的字符 Fortran中的常量 Fortran中的变量 Fortran的I-N规则 Fortran中的有效位数 Fortran中的申明 Fortran中的表达式 Fortran中的语句 ...

  3. [JOYOI] 1415 西瓜种植

    题目描述 笨笨种了一块西瓜地,但这块西瓜地的种植范围是一条直线的-- 笨笨在一番研究过后,得出了m个结论,这m个结论可以使他收获的西瓜最多. 笨笨的结论是这样的: 从西瓜地B处到E处至少要种植T个西瓜 ...

  4. 条款21:必须返回对象时,别妄想返回其reference(Don't try to return a reference when you must return an object)

    NOTE: 1.绝不要返回pointer或reference 指向一个local stack 对象,或返回reference 指向一个heap-allocated对象,或返回pointer 或refe ...

  5. 【笔记】ubuntu如何切换到root用户&&linux如何关闭各种保护

    默认安装完成之后并不知道root用户的密码,那么如何应用root权限呢? (1)sudo 命令   这样输入当前管理员用户密码就可以得到超级用户的权限.但默认的情况下5分钟root权限就失效了. () ...

  6. Android开发——遍历读写U盘、SD卡等外部存储

    1.首先需要得到挂载在手机上的有哪些盘符 String[] result = null; StorageManager storageManager = (StorageManager)getSyst ...

  7. 新建oracle连接远程服务

    更新下面两个文件夹中的 D:\app\shisan\product\11.2.0\client_1\network\admin D:\ORACLE\product\11.2.0\dbhome_1\NE ...

  8. 大数据学习——服务器定期上传nginx日志到hdfs

    需求:按照所学知识完成如下: 服务器定期上传nginx日志到hdfs 提示: Hdfs的创建文件夹命令: Hadoop fs -mkdir /文件夹名称 Hdfs的上传命令: Hadoop fs -p ...

  9. zoj 2932 The Seven Percent Solution

    The Seven Percent Solution Time Limit: 2 Seconds      Memory Limit: 65536 KB Uniform Resource Identi ...

  10. .NET下 JSON 的一些常用操作

    1.JSON的序列化和反序列化 Newtonsoft.Json dll 下载地址http://json.codeplex.com/ using System; using System.Collect ...