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 ...
随机推荐
- java登录拦截Filter
此例子为一个简单的登录拦截. 首先在web.xml中配置拦截类. <filter-mapping> <filter-name>SessionFilter</filter- ...
- Angular JavaScript内存溢出问题 (FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory)
方法一和方法二参考:https://www.cnblogs.com/liugang-vip/p/6857595.html 方法一:my-project/node_modules/.bin 下增大内存( ...
- 717. 1-bit and 2-bit Characters@python
We have two special characters. The first character can be represented by one bit 0. The second char ...
- 【洛谷日报#75】浅谈C++指针
放入我的博客食用效果更佳(有很多oi学习资料) 1.指针基础 1.引用 C++有一个东西叫引用,引用相当于给对象(如:变量)起了另一个名字,引用必须用对象初始化,一旦初始化,引用就会和初始化其的对象绑 ...
- 用户管理命令--useradd
用户管理命令--useradd 作用:用于添加一个新的用户 格式:useradd [ 选项 ] 用户名 选项的常用介绍 -u: UID指定用户id,必须是唯一的,并且大于499 -c: 添加注释,可以 ...
- python中的函数的分类
函数的种类 传参的基本要求 默认参数 *args 关键字参数 **kwargs 普通函数 带参数 默认参数 def text(a,b=2) print("haha") print( ...
- 《算法导论》— Chapter 15 动态规划
序 算法导论一书的第四部分-高级设计和分析技术从本章开始讨论,主要分析高效算法的三种重要技术:动态规划.贪心算法以及平摊分析三种. 首先,本章讨论动态规划,它是通过组合子问题的解而解决整个问题的,通常 ...
- 如何在小程序自定义组件和动态传入数据小demo
在开发过程中,我们会将页面常用功能抽象为一个组件,这样既方便又可以避免代码冗余.小程序中也提供了自定义组件,了解Vue的伙伴们会发现其实和Vue的组件化很相似.这里用返回顶部功能来说说如何自定义组件, ...
- HDU 2462 The Luckiest number
The Luckiest number Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Ori ...
- 【ITOO 5】启用MSDTC后的各种问题,以及解决方案
导读:在上篇博客中说到,通过启动微软的msdtc来实现分布式事务处理,随后,问题就来了,现在,一一总结这个过程中的问题. 一.已禁用对分布式事务管理器(MSDTC)的网络访问. 1.1,问题描述 已禁 ...