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. 关于DTCC数据库技术大会

    本次DTCC数据库技术大会是第9届了,这次大会虽然有不少公司的产品推介,总体来说还是有不少干货的. 专场较多,有选择地主要听了大数据实践跟流式计算这块.网易跟滴滴的分享比较不错. 了解到了现在大家是用 ...

  2. 利用JS动态生成隔行换色HTML表格

    用JS生成动态生成表格,行.列由用户输入,并使表格隔行换色 方法一. 代码: <!DOCTYPE html> 2 <html> 3 <head> 4 <tit ...

  3. margin塌陷和margin合并问题及解决方案

    margin塌陷 先举个例子 <style> body{ background-color:#000; } .wrapper{ width:200px; height:200px; bac ...

  4. int (*a)[10]和int *a[10]的区别

    有点晚了,放个链接,睡觉. https://stackoverflow.com/questions/13910749/difference-between-ptr10-and-ptr10

  5. PXE自动化安装系统

    准备(以centos7为例) ①关闭防火墙 ②关闭selinux ③dhcp服务设置为静态IP ④安装软件包 http:充当yum源安装包仓库 tftp-server :在它的工作目录存在引导主机的工 ...

  6. Python数据分析 Pandas模块 基础数据结构与简介(二)

    重点方法 分组:groupby('列名') groupby(['列1'],['列2'........]) 分组步骤: (spiltting)拆分 按照一些规则将数据分为不同的组 (Applying)申 ...

  7. 算法导论 第八章 线性时间排序(python)

    比较排序:各元素的次序依赖于它们之间的比较{插入排序O(n**2) 归并排序O(nlgn) 堆排序O(nlgn)快速排序O(n**2)平均O(nlgn)} 本章主要介绍几个线性时间排序:(运算排序非比 ...

  8. bzoj2973 入门oj4798 石头游戏

    我们人为地搞出来一个全能神,每次调用他他可以给一个节点 \(1\) 个石头. 这样,当前的状态就可以由上一秒的状态搞过来,这就像是一个递推.用矩阵加速. #include <iostream&g ...

  9. E-R图

    百度百科:E-R图 100多个数据库,一万多张表,能否使用一张E-R图来表示呢?它是可以的.数据设计依赖于企业的数据,而不是数据库的设计,对企业数据适当做归类,会直接导致数据设计,最终画出E-R图,数 ...

  10. 约分差束 例题 ZOJ 2770 火烧连营

    题目来源:ZOJ Monthly, October 2006, ZOJ2770题目描述:大家都知道,三国时期,蜀国刘备被吴国大都督陆逊打败了.刘备失败的原因是刘备的错误决策.他把军队分成几十个大营,每 ...