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中等待所有线程都执行结束
转自:http://blog.csdn.net/liweisnake/article/details/12966761 今天看到一篇文章,是关于java中如何等待所有线程都执行结束,文章总结得很好,原 ...
- More Effective C++ - 章节一 : 基础议题
1. 仔细区分 pointers 和 references references和pointers的差别描述如下: pointer:当需要考虑"不指向任何对象"时,或者是考虑&qu ...
- MySQL 8.0.12 基于Windows 安装教程
第一步:到MySQL官网下载安装包:https://dev.mysql.com/downloads/mysql/ 第二步:将下载好的安装包(mysql-8.0.12-winx64 .zip)解压到相应 ...
- (11) openssl req(生成请求证书、私钥和自建CA)
伪命令req大致有3个功能:生成证书请求文件.验证证书请求文件和创建根CA. 由于openssl req命令选项较多,所以先各举几个例子,再集中给出openssl req的选项说明.若已熟悉opens ...
- Java:追加文件内容
文章来源:https://www.cnblogs.com/hello-tl/p/9139367.html import java.io.*; public class FileBasicOperati ...
- 十二.GUI
tkinter模块(tkinter是一个跨平台的PythonGUI工具包): #Tkinter是一个跨平台的Python GUI工具包 import tkinter top=tkinter.Tk() ...
- POJ 1144 Network (求割点)
题意: 给定一幅无向图, 求出图的割点. 割点模板:http://www.cnblogs.com/Jadon97/p/8328750.html 分析: 输入有点麻烦, 用stringsteam 会比较 ...
- SQL Server 上关于同一张表里的三级联动
或许这并不能叫做三级联动,三级联动是很容易实现的东西,有明确的层级关系,一般分开三张表存储.我在公司的项目里遇到这样一个问题,同一张表里面,有分公司,客户,项目3种关系,他们的层级关系是这样:分公司- ...
- linux进程按启动时间排序命令
show me the code... ps aux --sort=start_time|grep Full|grep -v grep
- 70.打印所有Spring boot载入的bean【从零开始学Spring Boot】
[从零开始学习Spirng Boot-常见异常汇总] 问题的提出: 我们在开发过程当中,我们可能会碰到这样的问题:No qualifying bean 就是我们定义的bean无法进行注入,那到底是什 ...