每次写分页导航的时候都要在html页面写一堆标签和样式,太麻烦了,所以干脆自己动手封装一个自己喜欢的类直接生成。

一、PageHelper类:

 /// <summary>
/// 分页导航
/// </summary>
/// <param name="pageNum">当前第几页</param>
/// <param name="pageNumSum">总页数</param>
/// <param name="url">显示的url</param>
/// <param name="p">分页参数名</param>
/// <param name="linCount">显示多少页</param>
/// <returns></returns>
public static string page(int pageNum, int pageNumSum, string url, string p, int linCount)
{
if (pageNum < ) pageNum = ;
if (pageNum > pageNumSum) pageNum = pageNumSum;
// a的样式
string aStyle = "text-decoration:none;border:1px solid #075DB3;box-sizing:border-box;margin:0 2px;padding:2px 5px;font-size:12px;";
StringBuilder sb = new StringBuilder();
sb.AppendLine(string.Format("<div style='text-align:center;margin-bottom:30px;'>第<span style='color:#00ff21'>{0}</span>/{1} 页", pageNum, pageNumSum));
sb.AppendLine(string.Format(" <a style='{0}' href='{1}?{2}={3}'>上一页</a>", aStyle, url, p, pageNum - < ? : pageNum - ));
//设开始页为1
int beginPage = ;
//中间页为 linCount/2
int midPage = linCount / ;
if (pageNum > midPage)
{
beginPage = pageNum - midPage;
}
for (int i = ; i < linCount; i++)
{
//当前页不加链接
if (pageNum == beginPage + i)
{
sb.AppendLine(string.Format("<span style='display: inline-block;width:10px;'></span>{0}<span style='display: inline-block;width:10px;'></span>", beginPage + i));
}
else
{
sb.AppendLine(string.Format("<a style='{0}' href='{1}?{2}={3}'>{3}</a>", aStyle, url, p, beginPage + i));
}
//如果后面的页数大于总页数,退出循环
if (beginPage + i >= pageNumSum)
{
break;
} }
sb.AppendLine(string.Format(" <a style='{0}' href='{1}?{2}={3}'>下一页</a>", aStyle, url, p, pageNum + >= pageNumSum ? pageNumSum : pageNum + ));
sb.Append("</div>");
return sb.ToString();
}

二、演示

这是在一个mvc项目中做的演示

action :

 public ActionResult Index(string page)
{
//1.获得当前页数
int pageNum = ;//默认第一页
if(page!=null)
pageNum = Convert.ToInt32(page); //一些判断是否为int或者是否<0大于最大页数这里不做判断,主要演示分页效果
//2.总页数-- 查询数据库得到总条数再计算得到总页数
int pageNumSum = ;//假设计算得到结果为18页
string url = "/Demo/Index"; //当前url
//要显示多少页
int pageList = ;//假设看到5页
//mvc要 MvcHtmlString 进行生成html码,不然会是一个字符串
ViewBag.page = new MvcHtmlString(PageHelper.page(pageNum, pageNumSum, url, "page", pageList));
return View(); }

view:

<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<style type="text/css">
p {
text-align:center;
color:#00ff21;
}
</style>
</head>
<body>
<p>列表内容</p>
<p>列表内容</p>
<p>列表内容</p>
<p>列表内容</p>
<p>列表内容</p>
<div>
@ViewBag.page
</div>
</body>
</html>

效果:

后言:当然这主要是说一个方法,如果觉得这个不好看,你可以自己写多几个自己喜欢的分页效果类,想用哪个就调用哪个的。

自己写一个分页PageHelper的更多相关文章

  1. 用vue.js的v-for,v-if,computed写一个分页样式

    在学Vue,总想写个分页,先写了一个样式. 主要看思路: 思路简单,得到总页数,判断总页数,循环. 先判断总页数是否需要分页,总页数==1页就不分了. 再判断总页数<11就不用--. 总页数&g ...

  2. [转]Mybatis极其(最)简(好)单(用)的一个分页插件

    原文地址:http://blog.csdn.net/isea533/article/details/23831273 分页插件示例:http://blog.csdn.net/isea533/artic ...

  3. 牛逼哄哄的PageHelper分页插件到底是怎么实现的?网友:给我10分钟,给你写一个~

    Hi,各位读者们 PageHelper是一款好用的开源免费的Mybatis第三方物理分页插件,其实我并不想加上好用两个字,但是为了表扬插件作者开源免费的崇高精神,我毫不犹豫的加上了好用一词作为赞美. ...

  4. 使用纯js写的一个分页

    上图晒效果: 网上确实有很多分页的插件以及开源代码,单本是一个后台开发猿,前台css等样式还驾驭不住,所以就开始自己去写了.其实这个分页原理很简单,就是用ajax往后台传值(当前页码),后台使用lim ...

  5. 自己动手用Javascript写一个无刷新分页控件

    .NET技术交流群:337901356 ,欢迎您的加入! 对 于一个用户体验好的网站来说,无刷新技术是很重要的,无刷新,顾名思义,就是局部刷新数据,有用过Asp.net Web Form技术开发网页的 ...

  6. yii下多条件多表组合查询以及自写ajax分页

    多条件组合查询主要用到yii的CDbCriteria,这个类很多oem框架都有,非常好用. 前台表单 前台查询表单效果是这样的,多个条件组,每个组里放多个input,name为数组.当任何一个复选框被 ...

  7. 基于vue2.0的一个分页组件

    分页组件在项目中经常要用到之前一直都是在网上找些jq的控件来用(逃..),最近几个项目用上vue了项目又刚好需要一个分页的功能.于是百度发现几篇文章介绍的实在方式有点复杂, 没耐心看自己动手造轮子写了 ...

  8. 手动的写一个structs

    为了更好的学习框架的运行机制,这里开始学习框架之前,介绍一个简单的自定义的框架. 需求: 登录:id:aaa,pwd:888登录成功之后,跳转到,index.jsp页面并显示,欢迎你,aaa 注册,页 ...

  9. 用weexplus从0到1写一个app

    说明 基于wexplus开发app是来新公司才接触的,之前只是用过weex体验过写demo,当时就被用vue技术栈来开发app的开发体验惊艳到了,这个开发体验比react native要好很多,对于我 ...

随机推荐

  1. 实现加载Tomcat服务器中的图片,并且有进度条提示进度

    首先布局页面, <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andr ...

  2. Java根据年龄段获取对应年份起始时间戳和最终时间戳、根据生日时间戳获取月份(与数据库的时间戳处理成的月份拼接成SQL条件)

    1.传入年龄段,两个值,一个最小值,一个最大值,然后获取该年龄段的两个时间戳: (1)处理时间方法: /** * 根据年龄获取时间戳(开始年龄key取0,返回一年最后一秒时间戳,时间戳大:反之结束年龄 ...

  3. 适用于VS C++环境的注释代码段,可以让你的代码被使用时有高可读性的注释

    编码时,在对高级语言(C#/VB etc)函数的访问时,经常会有很明确的函数功能提示,参数提示,与返回值提示.微软的VisualStudio C++集成开发环境同样有这样的功能,只是常见开源的代码很少 ...

  4. java.lang.IllegalStateException: Cannot forward after response has been committed的一个情况解决方法

    java.lang.IllegalStateException: Cannot forward after response has been committed xxx.xxx.doPost(upd ...

  5. mssql sqlserver 规范使用方法分享

    转自:http://www.maomao365.com/?p=5586 摘要:下文主要讲述sql server表设计及脚本编写中,相关规范 ———————————数据表字段类型选择:字符类型根据长度选 ...

  6. 关于Box Anemometer的安装配置遇到的几个坑

    Box Anemometer是一个非常不错的MySQL慢查询可视化工具平台,具体就不多详述了,官网是https://github.com/box/Anemometer 最近动自己动手搭了一个,具体搭建 ...

  7. Greenplum hostname和address不一致导致配置文件无法加载

    最近又遇到了几个坑,逐一记录分析下. 1.主机名hostname和address不一致 在又一次部署压测环境交由测试组进行压测时,同事修改了pg_hba.conf文件重新加载配置文件时报错.(找不到l ...

  8. .gho文件检查

    虽然目前windows10的接受程度越来越广泛,但我接触到的一些非IT人士还是钟爱于windows7系统,本文记录一下在使用ghost还原系统遇到的问题. gho还原失败 在还原ghost系统过程中, ...

  9. Unity的AssetDatabase路径格式

    开发环境 windows 7 Unity 5.3 及更高版本 前言 使用AssetDatabase.Load或AnimatorController.CreateAnimatorControllerAt ...

  10. js实现的省市联动

    最近工作,要用到省市联动的功能.网上搜了一下,发现有很多这样的例子,看了不少实例,把觉得写得不错的代码穿上来,好给大家分享一下. <!DOCTYPE html PUBLIC "-//W ...