public class PageHelper
{
/// <summary>
/// 标签
/// </summary>
public string Tag { get; set; }
/// <summary>
/// 选中的标签样式
/// </summary>
public string TagCurr { get; set; }
/// <summary>
/// 分页的路径
/// </summary>
public string Url { get; set; }
/// <summary>
/// 当前页
/// </summary>
public int PageIdnex { get; set; }
/// <summary>
/// 总页数
/// </summary>
public int PageCount { get; set; } /// <summary>
/// 实现分页算法
/// </summary>
/// <returns></returns>
public string CreatePage( )
{ //1.1当前页大于总页数
if (PageIdnex > PageCount) return null;
StringBuilder sb = new StringBuilder();
//1.2当总页数小于5条时,显示全部的页码
if (PageCount <= )
{
//拼接页码
for (int i = ; i <= PageCount; i++)
{
if (PageIdnex == i)
{
//拼接当前页
sb.Append($"<a onclick=pager(\"{Url}\",{i}) class=\"{TagCurr}\">{i}</a>");
}
else
{
sb.Append($"<a onclick=pager(\"{Url}\",{i})>{i}</a>");
}
}
return sb.ToString();
}
else
{
//2.2 总页数大于5,当前页小于4时
if (PageIdnex <= )
{
//2.2.1 当前页靠近尾页
if (PageCount - PageIdnex <= )
{
//拼接第一页
sb.Append($"<a onclick=pager(\"{Url}\",{1})>1</a><a>...</a>");
for (int i = PageIdnex - ; i <= PageCount; i++)
{
if (PageIdnex == i)
{
//拼接当前页
sb.Append($"<a onclick=pager(\"{Url}\",{i}) class=\"{TagCurr}\">{i}</a>");
}
else
{
sb.Append($"<a onclick=pager(\"{Url}\",{i})>{i}</a>");
}
}
}
else
{
//2.2.2当前页靠近首页
for (int i = ; i <= PageIdnex + ; i++)
{
if (PageIdnex == i)
{
sb.Append($"<a onclick=pager(\"{Url}\",{i}) class=\"{TagCurr}\">{i}</a>");
}
else
{
sb.Append($"<a onclick=pager(\"{Url}\",{i})>{i}</a>");
}
}
//拼接最后一页
sb.Append($"<a>...</a><a onclick=pager(\"{Url}\",{PageCount})>{PageCount}</>");
} }
else
{
//2.3 总页数大于5,当前页大于4时
sb.Append($"<a onclick=pager(\"{Url}\",{1})>1</a><a>...</a>");
//2.3.1 当前页大于4,当前页离尾页很近
if (PageCount - PageIdnex <= )
{
for (int i = PageIdnex - ; i <= PageCount; i++)
{
if (PageIdnex == i)
{
sb.Append($"<a onclick=pager(\"{Url}\",{i}) class=\"{TagCurr}\">{i}</a>");
}
else
{
sb.Append($"<a onclick=pager(\"{Url}\",{i})>{i}</a>");
}
}
}
else
{
//2.3.2当前页在中间
for (int i = PageIdnex - ; i < PageIdnex + ; i++)
{
if (PageIdnex == i)
{
sb.Append($"<a onclick=pager(\"{Url}\",{i}) class=\"{TagCurr}\">{i}</a>");
}
else
{
sb.Append($"<a onclick=pager(\"{Url}\",{i})>{i}</a>");
}
}
sb.Append($"<a>...</a><a onclick=pager(\"{Url}\",{PageCount})>{PageCount}</>");
}
} return sb.ToString();
}

控制器 var list = new List<string>();

for (int i = ; i <= ; i++)
{
list.Add("北京朝阳区" + i);
}
int pageSzie = ;
int pageCount = ;
if (list.Count % pageSzie == )
{
pageCount = list.Count / pageSzie;
}
else
{
pageCount = (list.Count / pageSzie) + ;
}
PageHelper ph = new PageHelper
{
Tag = "a",
TagCurr = "curr",
Url = "/testpage/list/",
PageIndex=pageIndex,
PageCount=pagecount
            };
var strHtml = ph.CreatePage();
var pageList = list.Skip((pageIndex - ) * pageSzie).Take(pageSzie).ToList();
ViewBag.StrHtml = strHtml;
ViewBag.PageList = pageList;

JS

function fenye_ok() {
pager("/TestPage/list", ); } function pager(href, pageIndex) {
var num = $("#num").val();
$("#div-load").load("/TestPage/list", { "pageIndex": pageIndex, "num": num }, function () { });
}

Html列表分页算法的更多相关文章

  1. VIPS:基于视觉的页面分割算法[微软下一代搜索引擎核心分页算法]

    VIPS:基于视觉的页面分割算法[微软下一代搜索引擎核心分页算法] - tingya的专栏 - 博客频道 - CSDN.NET VIPS:基于视觉的页面分割算法[微软下一代搜索引擎核心分页算法] 分类 ...

  2. django之分页算法实现(Paginator)

    导入模块:from django.core.paginator import Paginator 一.Paginator的基本用法: from django.core.paginator import ...

  3. 基于Metronic的Bootstrap开发框架经验总结(2)--列表分页处理和插件JSTree的使用

    在上篇<基于Metronic的Bootstrap开发框架经验总结(1)-框架总览及菜单模块的处理>介绍了Bootstrap开发框架的一些基础性概括,包括总体界面效果,以及布局.菜单等内容, ...

  4. PHP+jQuery 列表分页类 ( 支持 url 分页 / ajax 分页 )

    /* ******* 环境:Apache2.2.8 ( 2.2.17 ) + PHP5.2.6 ( 5.3.3 ) + MySQL5.0.51b ( 5.5.8 ) + jQuery-1.8.3.mi ...

  5. 嗨分享-前端技术-帝国CMS手机站修改列表分页(sysShowListMorePage)

    http://bbs.phome.net/showthread-31-318753-0.html 如果你的网站使用的是帝国CMS.PC站和手机站各使用一个模板组,但共同使用一个数据库.那么你的PC站和 ...

  6. ASP的高效率的分页算法.net,php同样可以参考

    一般习惯使用的有两种分页算法,一是传统的ADO分页,二是SELECT TOP分页算法.对于小型数据表,比如一两万的数据量的表,我倾向使用ADO算法,对于大型的数据表,则必须采用后者的算法了. 先来说说 ...

  7. 织梦DeDeCms列表分页和内容页分页错位解决办法

    文章页分页代码在这里/include/arc.archives.class.php列表页分页/include/arc.listview.class.php 很多入门的站长会碰到这样的问题,织梦的通病, ...

  8. arcpagelistarclist列表分页

    arcpagelistarclist列表分页 (DedeCMS 5.6) 名称:arcpagelist 功能:通过制定arclist的pagesize及tagid属性,配合arcpagelist标签进 ...

  9. web qq 获取好友列表hash算法

    web qq 获取好友列表hash算法 在使用web qq的接口进行好友列表获取的时候,需要post一个参数:hash 在对其js文件进行分析之后,发现计算hash的函数位于: http://0.we ...

随机推荐

  1. Node.js的异步IO和事件轮询

     想象一下,以前我们在写程序时, 如果程序在I/O上阻塞了,当有更多请求过来时,服务器会怎么处理呢?在这种情景中通常会用多线程的方式.一种常见的实现是给每个连接分配一个线程,并为那些连接设置一个线程池 ...

  2. Windows PowerShell 入門(4)-変数と演算子

    Windows PowerShellにおける変数と演算子の使用方法について学びます.今回は代表的な演算子として.算術演算子.代入演算子.論理演算子.比較演算子.範囲演算子.置換演算子.ビット演算子.型 ...

  3. 华为Qinq的配置

    作者:邓聪聪 qinq(dot1q in dot1q)是一种二层环境中的二层vpn技术,用于二层ISP网络将相同客户网络中的vlan帧,再打一层vlan-tag的手段实现同一个客户的不同站点之间的数据 ...

  4. 【转】C++标准转换运算符const_cast

    const_cast转换符是用来移除变量的const或volatile限定符. 对于const变量,我们不能修改它的值,这是这个限定符最直接的表现.但是我们就是想违背它的限定希望修改其内容怎么办呢? ...

  5. hibernate框架学习之使用SQLQuery查询数据

    SQLQuery对象的获取 Hibernate支持使用原生SQL语句进行查询,通过session对象获得SQLQuery对象进行,需要传入SQL语句 SQLQuery createSQLQuery(S ...

  6. Qt 出现“undefined reference to `vtable for”

    在QT中定义了一个线程类,继承自QThread, 在类中未加 Q_OBJECT 时编译正常,加入后报错如下: undefined reference to `vtable for myThread' ...

  7. python的assert关键字用法

  8. matlab积分使用

    clc; %清屏 clear; %清除变量 close all; %关闭 syms x; f(x) = x; df = int(f(x),x);%求不定积分 figure; subplot(1,2,1 ...

  9. Uncaught RangeError: Maximum call stack size exceeded

    环境: jquery+bootstrap+bootstrapValidator 问题描述:有个form表单,一点击按钮提交,就会报如题错误.正常应该是去校验表单输入. 解决: 从日志分析来看,报错的起 ...

  10. malloc(0)

    malloc的内存分配之 malloc(0)的内存分配情况 #include<iostream> using namespace std; int main() { char *p; if ...