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 4 插件化架构简单实现-思路篇
用过和做过插件的都会了解插件的好处,园子里也有很多和讨论,但大都只些简单的加载程序集什么的,这里主要讨论的就是使用 ASP.NET MVC 4 来实现每个插件都可以完全从主站点剥离出来,即使只是一个插 ...
- ASP.NET MVC 4 插件化架构简单实现-实例篇
先回顾一下上篇决定的做法: 1.定义程序集搜索目录(临时目录). 2.将要使用的各种程序集(插件)复制到该目录. 3.加载临时目录中的程序集. 4.定义模板引擎的搜索路径. 5.在模板引擎的查找页面方 ...
- Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理
这是本人第一次写,写的不好的地方还忘包含.写这个的主要原因是想通过这个来学习下EF的CodeFirst模式,本来也想用AngularJs来玩玩的,但是自己只会普通的绑定,对指令这些不是很熟悉,所以就基 ...
- Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理6
接下来先做角色这一板块的(增删改查),首先要新建一个Role控制器,在添加一个RoleList的视图.表格打算采用的是bootstrap的表格. using System; using System. ...
- 使用asp.net mvc + entityframework + sqlServer 搭建一个简单的code first项目
步骤: 1. 创建一个asp.net mvc 项目 1.1 项目创建好结构如下 2 通过vs安装EntityFramework框架 install-package entityframework 3. ...
- asp.net mvc 简易通用自定义Pager实现分页
asp.net mvc 自定义Pager实现分页 Intro 一个WEB应用程序中经常会用到数据分页,本文将实现一个简单通用的分页组件,包含一个 PagerModel (用来保存页码信息),一个 Ht ...
- 让Asp.net mvc WebAPI 支持OData协议进行分页查询操作
这是我在用Asp.net mvc WebAPI 支持 OData协议 做分页查询服务时的 个人拙笔. 代码已经开发到oschina上.有兴趣的朋友可以看看,欢迎大家指出不足之处. 看过了园子里的几篇关 ...
- 转:ASP.NET MVC利用TryUpdateModel来做资料更新 (一)
前言有使用 ASP.NET MVC 的朋友们一定多多少少有听过 TryUpdateModel,之前就看了很多有关它的文章,但在专案实务上都未曾实际使用过,而 TryUpdateModel 不仅能利用 ...
- 转:ASP.NET MVC利用TryUpdateModel来做资料更新 (二)
前言 第一篇說明了 TryUpdateModel 的簡單的應用,除了可指定更新的欄位之外也可排除更新特定的欄位,而因為可搭配 Metadata 做欄位驗證為資料又做了一層把關,但在 ASP.NET M ...
随机推荐
- python+Eclipse+pydev环境搭建1
编辑器: Eclipse + pydev插件 1. Eclipse是写JAVA的IDE, 这样就可以通用了,学习代价小. 学会了Eclipse, 以后写Python或者JAVA 都可以. 2. Ec ...
- 洛谷 P2337 【[SCOI2012]喵星人的入侵】
这几天一直在刷插头Dp,写了几道入门题后,觉得还比较水,直到我发现了这一题.... 题目大意:给你一个n*m的地图,有些是空地,有些是障碍,还有两个是ST,在给你一个L,代表可以放L个炮台,你要在空地 ...
- [POJ] 2223 Muddy Fields
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11490 Accepted: 4270 Description Rain has ...
- excel组装sql
="INSERT INTO TABLE_XXXX (COLUMN_1, COLUMN_2, COLUMN_3, COLUMN_4, COLUMN_5, COLUMN_6, COLUMN_7, ...
- 测试网站链接是否可用(wget和curl)
一.wget用法案例 系统给的命令参数如下: [root@litong_centos mysql3307]# wget --help GNU Wget 1.14, a non-interactive ...
- java线程总结--synchronized关键字,原理以及相关的锁
在多线程编程中,synchronized关键字非常常见,当我们需要进行“同步”操作时,我们很多时候需要该该关键字对代码块或者方法进行锁定.被synchronized锁定的代码块,只能同时有一条线程访问 ...
- Java多线程干货系列—(四)volatile关键字
原文地址:http://tengj.top/2016/05/06/threadvolatile4/ <h1 id="前言"><a href="#前言&q ...
- HDU 2352 Verdis Quo
罗马数字转化为十进制的值 题目非常的长 提取有效信息 并且介绍很多规则 但是事实上有用的信息就是如何加 什么时候减 当当前字母小于下一个字母时 减去当前字母的值 #include <iostre ...
- 《effective C++》:条款37——绝不重新定义继承而来的缺省参数值
引子: 阿里的一道题: #include <IOSTREAM> using namespace std; class A{ public: ) { cout<<"a~ ...
- Python基础教程笔记——第1章
1.8 函数 pow(x,y) x^y abs(x) 取数的绝对值 round(x) 会把浮点数四舍五入为最接近的整数 floor(x) 向下取整的函数,但是需要先imp ...