Html列表分页算法

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 <= 5)
            {
                //拼接页码
                for (int i = 1; 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 <= 4)
                {
                    //2.2.1 当前页靠近尾页
                    if (PageCount - PageIdnex <= 3)
                    {
                        //拼接第一页
                        sb.Append($"<a onclick=pager(\"{Url}\",{1})>1</a><a>...</a>");
                        for (int i = PageIdnex - 1; 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 = 1; i <= PageIdnex + 2; 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 <= 2)
                    {
                        for (int i = PageIdnex - 2; 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 - 2; i < PageIdnex + 2; 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 = 1; i <= 100; i++)
            {
                list.Add("北京朝阳区" + i);
            }
            int pageSzie = 10;
            int pageCount = 0;
            if (list.Count % pageSzie == 0)
            {
                pageCount = list.Count / pageSzie;
            }
            else
            {
                pageCount = (list.Count / pageSzie) + 1;
            }
            PageHelper ph = new PageHelper
            {
                Tag = "a",
                TagCurr = "curr",
                Url = "/testpage/list/",                PageIndex=pageIndex,                PageCount=pagecount
            };
            var strHtml = ph.CreatePage();
            var pageList = list.Skip((pageIndex - 1) * pageSzie).Take(pageSzie).ToList();
            ViewBag.StrHtml = strHtml;
            ViewBag.PageList = pageList;

JS

function fenye_ok() {
    pager("/TestPage/list", 1);

}

function pager(href, pageIndex) {
    var num = $("#num").val();
    $("#div-load").load("/TestPage/list", { "pageIndex": pageIndex, "num": num }, function () { });
}
时间: 2024-10-08 18:32:43

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

在 asp.net mvc中的简单分页算法

//第一步:建立如下分页实体类:namespace MVCPager.Helpers { /// <summary> /// 简单分页算法类 /// </summary> public class Pager { public int RecordCount { get; set; } public int PageIndex { get; set; } public int PageSize { get; set; } public int PageCount { get { r

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

http://bbs.phome.net/showthread-31-318753-0.html 如果你的网站使用的是帝国CMS.PC站和手机站各使用一个模板组,但共同使用一个数据库.那么你的PC站和手机站,列表分页样式是一样的吗? 今天<a href="http://www.thy6415.com">嗨分享-前端技术</a>将带你感受不一样的分页样式! PC站可以把分页按1.2.3.4...这样并排 列出来,但手机站是万万不可以这样做的,否则手机屏幕小,分页看

帝国CMS手机站修改列表分页(sys_ShowListMorePage)

如果你的网站使用的是帝国CMS.PC站和手机站各使用一个模板组,但共同使用一个数据库.那么你的PC站和手机站,列表分页样式是一样的吗? 今天嗨分享-前端技术将带你感受不一样的分页样式! PC站可以把分页按1.2.3.4...这样并排 列出来,但手机站是万万不可以这样做的,否则手机屏幕小,分页看着都好长,一点都不美观. 帝国CMS的PC站可以使用[!--show.listpage--]调用列表形式的列表分页函数(sys_ShowListMorePage). 一旦PC站使用[!--show.list

js列表分页

<!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-

支持数据列表分页的帮助类

[WPF]闲着没事,写了个支持数据列表分页的帮助类 支持分页的MVVM组件大家可以网上找,老周这个类只是没事写来娱乐一下的,主要是功能简单,轻量级,至少它满足了我的需求,也许还有未知的 bug . 这个类支持对数据列表进行分页处理,原理是利用 Skip 和 Take 扩展方法,从源列表中取出某一段数据.在实例化的时候,需要提供一个 IEnumerable<T> 对象作为参数,本类会根据这个数据源来计算分页,使用参数T使其支持泛型. public PagabledCollection(IEnum

常用的SQL分页算法及对比

SQL Server 2005引入的新方法. 1 SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY keyField DESC) AS rowNum, * FROM tableName) AS t WHERE rowNum > start[比如:90] AND rowNum <= end[比如:100]=>[返回91-100] 2 3 SELECT top (PAGESIZE[比如:10]) FROM (SELECT ROW_NUMBER(

webqq 获得好友列表hash算法 获得最新hash的方法

webqq获得好友列表的hash算法,大约每个月中旬会变动一次.知道怎么获得他就可以了. js文件路径 http://web.qstatic.com/webqqpic/pubapps/0/50/eqq.all.js 加密算法为 P=function(b,i),有时候是 P=function(b,j) 直接打开这个文件后搜索P=function,有两个参数的就是. 把函数体拷贝下来后百度 js格式化工具,把内容放进去,格式化一下. 下面是2014年6月17日时的hash函数: P=function

SQL Server海量数据库的查询优化及分页算法方案

建立一个web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页.但这种分页方法仅适用于较小数据量的情形,因为游标本身有缺点:游标是存放在内存 中,很费内存.游标一建立,就将相关的记录锁住,直到取消游标.游标提供了对特定集合中逐行扫描的手段,一般使用游标来逐行遍历数据,根据取出数据条件的 不同进行不同的操作.而对于多表和大表中定义的游标(大的数据集合)循环很容易使程序进入一个漫长的等

模拟百度分页算法实现

定义变量 pageSize 每一页显示的记录条件 pageNow 当前页,初始默认值为1 pageCount 总页数,有pageSize和数据库总记录数决定 公式:double res = select count(id) from 记录表 // 使用Math函数将结果向上取整 pageCount = (int) Math.ceil(res / pageSize); pageNow是传入参数,pageCount是传出参数,pageSize内部使用页码分页显示 pageNum 每一页显示的页码数,