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 ...
随机推荐
- ionic小白的学习路之目录结构分析、创建组件、创建页面、页面跳转
一. 目录结构分析 hooks:编译cordova 时自定义的脚本命令,方便整合到我们的编译系统和版本控制系统中. node_modules :node 各类依赖包. resources :andro ...
- JS简单实现防抖和节流
一.什么是防抖和节流 Ps: 比如搜索框,用户在输入的时候使用change事件去调用搜索,如果用户每一次输入都去搜索的话,那得消耗多大的服务器资源,即使你的服务器资源很强大,也不带这么玩的. 1. 防 ...
- 数的计数(noip2001,动态规划递推)
题目链接: 普通版: https://www.luogu.org/problemnew/show/P1028 数据加强版: https://www.luogu.org/problemnew/show/ ...
- MySQL丨02丨忘记root用户密码怎么办?
软件:Mysql 版本:8.0.13 1. 先暂停mysql的服务,方法是在cmd里输入如下代码: net stop mysql 2. 在安装文件夹下创建一个文件:mysql-ini.txt (我的安 ...
- (7) 将tomcat HTTP连接器启动在80端口(jsvc使用详解)
让tomcat在80端口上运行 法一: 修改连接器的端口8080为80 <Connector port="8080" protocol="HTTP/1.1" ...
- 生成优惠券,并将优惠券存入Mysql
#coding:utf-8 import random import string import MySQLdb def gen_charint(filename, width =4, num=5): ...
- LeetCode(100) Same Tree
题目 Given two binary trees, write a function to check if they are equal or not. Two binary trees are ...
- ES6(对象扩展)
ES6(对象(object)新增特性) 1.简介表示法 o,k 为属性:这种为无方法的情况. 这种为有方法. 2.属性表达式 ES6中,[a]就是 b . 3.新增API 1.数组也是引用类型 2.O ...
- winform中ComboBox控件的简单使用
在开发winform中用到了ComboBox,但是发现和asp.net中的DropDownList差别比我想象中的大. 给ComboBox添加数据总结的有两种方法(绑定数据库在这里不说): 第一种方法 ...
- 【Ajax 3】JavaScript封装Ajax
导读:上一篇博客简单介绍了一下对Ajax中的核心对象XMLHttpRequest的封装.那么为了方便对Ajax的应用,我们还需要进一步的对Ajax的基本功能进行下一步的封装,不得不说的是早就有人专门写 ...