常用分页写法

/// <summary>
/// 分页控件
/// </summary>
/// <param name="htmlHeper">源HtmlHelper</param>
/// <param name="currentIndex">当前页(1-n)</param>
/// <param name="pageSize">页大小</param>
/// <param name="totalCount">总数</param>
/// <returns>Pager Html</returns>
public static MvcHtmlString LSPager(this HtmlHelper htmlHeper, int currentIndex, int pageSize, long totalCount, string styleClassStr = "shy_pagelist clearfix mar_t20 mar_b20")
{
#region 源html

//PS:由于样式决定,分页是倒序排列

/*
<div class="shy_pagelist clearfix mar_t20 mar_b20">
<a href="#">尾页</a>
<a href="#"><span class="icon iconfont"></span></a>
<a href="#">15</a>
<a href="javascript:void(0);">...</a>
<a href="#">7</a>
<a href="#">6</a>
<a href="#">5</a>
<a href="#">4</a>
<a href="#">3</a>
<a href="#">2</a>
<a href="#">1</a>
<a href="#"><span class="icon iconfont"></span></a>
<a href="#">首页</a>
</div>
*/

#endregion

//预计展示方式:首页 上一页 5 6 7 [8] 9 10 11 ... 14 下一页 尾页

//判断参数
if (totalCount <= 0)
{
return new MvcHtmlString("");
}
if (currentIndex <= 0)
{
currentIndex = 1;
}
if (pageSize <= 0)
{
pageSize = 1;
}

//计算总页数
long pageCount = totalCount / pageSize;
if (pageCount <= 0)
{
pageCount = 1;
}
else if (pageCount > 0 && (totalCount % pageSize) > 0)
{
pageCount += 1;
}

//处理总显示页数
long beginPage = 1;
long endPage = currentIndex <= 3 ? 7 : currentIndex + 3;
if (currentIndex >= 4 && pageCount > 8)
{
beginPage = currentIndex - 3;
}
if ((pageCount - currentIndex) <= 4 && pageCount > 8)
{
beginPage = pageCount - 7;
}

//获取当前地址
string query = htmlHeper.ViewContext.HttpContext.Request.Url.Query + "";
query = HttpUtility.UrlDecode(query);

string rawUrl = htmlHeper.ViewContext.HttpContext.Request.Url.ToString() + "";
rawUrl = HttpUtility.UrlDecode(rawUrl);

if (!string.IsNullOrWhiteSpace(query))
{
rawUrl = rawUrl.Replace(query, "");
}
rawUrl += "?pageindex={0}&pagesize={1}";

NameValueCollection collection = htmlHeper.ViewContext.HttpContext.Request.QueryString;
foreach (var item in collection.AllKeys)
{
if (item.ToLower() == "pageindex" || item.ToLower() == "pagesize")
{
continue;
}
rawUrl += string.Format("&{0}={1}", item, collection[item]);
}

StringBuilder sb = new StringBuilder();
sb.Append("<div class=\"" + styleClassStr + "\">");

//下一页和尾页
if (currentIndex < pageCount)
{
sb.AppendFormat("<a href=\"{0}\">尾页</a>", string.Format(rawUrl, pageCount, pageSize));
sb.AppendFormat("<a href=\"{0}\"><span class=\"tit16 jq_next_page\" style=\"font-family:‘宋体‘;\">></span></a>", string.Format(rawUrl, currentIndex + 1, pageSize));
}

//绑定页数
for (long i = pageCount; i >= beginPage; i--)
{
//判定结束页
if (i > endPage && i == pageCount)
{
sb.AppendFormat("<a href=\"{1}\">{0}</a>", pageCount, string.Format(rawUrl, pageCount, pageSize));
continue;
}
if (i > endPage && i != pageCount)
{
sb.AppendFormat("<a href=\"javascript:void(0);\">...</a>");
i = endPage + 1;
continue;
}

//绑定选中页
if (i == currentIndex)
{
sb.AppendFormat("<a class=\"active\" href=\"javascript:void(0);\">{0}</a>", i);
}
else
{
sb.AppendFormat("<a href=\"{1}\">{0}</a>", i, string.Format(rawUrl, i, pageSize));
}
}

//首页和上一页
if (currentIndex > 1)
{
sb.AppendFormat("<a href=\"{0}\"><span class=\"tit16 jq_prev_page\" style=\"font-family:‘宋体‘;\"><</span></a>", string.Format(rawUrl, currentIndex - 1, pageSize));
sb.AppendFormat("<a href=\"{0}\">首页</a>", string.Format(rawUrl, 1, pageSize));
}

sb.Append("</div>");

string html = sb.ToString();
sb.Clear();

// 一页不用显示
if (pageCount <= 1)
{
return new MvcHtmlString("");
}

return new MvcHtmlString(html);
}

//拼接当前的url
private static string GetCurrentUrl(int pageIndex,int pageSize)
{
string url = HttpContext.Current.Request.Url.ToString().ToLower();
string query = HttpContext.Current.Request.Url.Query.ToLower();

if (!string.IsNullOrWhiteSpace(query))
{
url = url.Replace(query, "");
}

url += "?pageindex="+pageIndex+"&pagesize="+pageSize;

//获取所有参数
NameValueCollection requestParams = HttpContext.Current.Request.QueryString;
foreach (var item in requestParams.AllKeys)
{
if (item.ToLower().Contains("pageindex") || item.ToLower().Contains("pagesize"))
{
continue;
}

url += item+"="+requestParams[item];
}

return url;
}

时间: 2024-10-18 05:48:20

常用分页写法的相关文章

07. 分页写法小结

原文:07. 分页写法小结 分页的实现方式有这几种:1. 在前台程序中,将所有的记录都读到本地,前台程序通过游标在数据集中上下移动,数据量大的话,性能很差,不推荐:2. 前台程序请求某一页数据时,到数据库做一次查询,返回符合条件的相应记录,这也是目前常用的方法:3. 对方式2的改进,当请求某一页时,同时将前后几页一并返回,用户翻页时就不需要反复请求数据库了. 对于2,3的实现,随着SQL Server版本的升级,常用的方法有三种:TOP,ROW_NUMBER,OFFSET/FETCH NEXT.

SqlServer 常用分页方法总结

SqlServer 常用分页方法总结 下面示例总结了,SqlServer数据库 常用分页方法,仅供学习参考 A. 使用 RowNumber 和 Between And 组合分页: /********** 使用 RowNumber 和 Between And 组合分页 **********/ CREATE PROC proc_FuzzySearchAndPaging @pageIndex int, --页索引 @pageSize int, --页大小 @SearchKey Nvarchar(10)

[Oracle]关于Oracle分页写法的性能分析及ROWNUM说明

关于分页写法的性能分析及ROWNUM的补充说明 分页写法 一.测试前数据准备 SQL> SELECT COUNT(*) FROM BPM_PROCVAR; COUNT(*) ---------- 2121400 1.分页写法一 SELECT * FROM (SELECT ROWNUM RN, A.* FROM (SELECT * FROM BPM_PROCVAR ORDER BY VARID) A WHERE ROWNUM <= 40) B WHERE B.RN >= 21; 查询结果:

3种SQL语句分页写法

在开发中经常会使用到数据分页查询,一般的分页可以直接用SQL语句分页,当然也可以把分页写在存储过程里,下面是三种比较常用的SQL语句分页方法,下面以每页5条数据,查询第3页为例子: 第一种:使用not in,select top 方法: select top 5 * from T_user where ID not in(select top (3-1)*5 id from T_user order by ID) 说明:select top 页大小 [要查询的字段名称] from 表名 wher

Emmet插件比较实用常用的写法

看了一些关于Emmet插件写法的文档,港真,怎么可以写这么长啊.其实知道几个大概要点加上实践基本就能上手写了啊 杂话 我前面有一篇[今天发现新大陆:haml和Emmet ],其实一开始的想法是写给自己看的. 有人去阅读我的博客和评论,虽然不算多,但是对于我这种刚入门的小白渣渣还是受宠若惊的.我这大喜的蠢样子也是经常被男票说四不四傻……ㄟ(⊙ω⊙ㄟ) 嗯,跑偏了.总之,以后写东西不管是给自己看也好,给别人看都好.秉持着分享的精神一定认真好好的写(~Q~) 关于Emmet Emmet插件的前身是Ze

easyui的datagrid分页写法小结

easyui的datagrid分页死活不起作用...沙雕了...不说了上代码 1 //关闭tab1打开tab2 查询Detail 2 function refundDetail(){ 3 $('#tt').tabs('select', "Detail Information");//subtitle为选项卡的标题 4 //发起ajax请求,查询退款detail 5 var dayendDate = $("#dayendDate").val(); 6 var term

【转】大数据量分页写法

mysql大数据量使用limit分页,随着页码的增大,查询效率越低下. 测试实验 1.   直接用limit start, count分页语句, 也是我程序中用的方法: select * from product limit start, count当起始页较小时,查询没有性能问题,我们分别看下从10, 100, 1000, 10000开始分页的执行时间(每页取20条), 如下: select * from product limit 10, 20   0.016秒select * from p

mybatis常用分页插件,快速分页处理

在未分享整个查询分页的执行代码之前,先了解一下执行流程. 1.总体上是利用mybatis的插件拦截器,在sql执行之前拦截,为查询语句加上limit X X 2.用一个Page对象,贯穿整个执行流程,这个Page对象需要用java编写前端分页组件 3.用一套比较完整的三层entity,dao,service支持这个分页架构 4.这个分页用到的一些辅助类 注:分享的内容较多,这边的话我就不把需要的jar一一列举,大家使用这个分页功能的时候缺少什么就去晚上找什么jar包即可,尽可能用maven包导入

前端的一个分页写法

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-