.NET 分页帮助类

news2024/11/23 17:05:12

一直以来,分页是一个非常常见的需求,以前也用过很多的分页控件,比如AspNetPager,现在自己参照之前用过的,自己写了一个非常简单实用的分页实现方法。
先来看看应用效果:
在这里插入图片描述
在这里插入图片描述
如图,定义了是前10页,那么第11页及以后的用...显示,如果是第11页~20页,隐藏前10页以及20以后的内容。
代码非常简单,也在实际项目中运用了。需要注意的是,分页代码没有参与数据库的数据读取。需要先取出数据来,再设置分页就可以了。

文章目录

  • 定义分页基本字段
  • 分页方法
  • 实际应用
  • 自己完的一个CSS
  • 总结

定义分页基本字段

private int _currPageIndex;
private int _pageSize = 25;
private string _prevPageText = "上页";
private string _nextPageText = "下页";
private string _firstPageText = "首页";
private string _lasePageText = "末页";
private bool _showFirstLast = true;
private int _recordCount = 0;
private int _showNum = 10;
private string _class = "pagination";
private bool _ShowMoreButtons = true;
private bool _ShowPageIndex = true;

/// <summary>
/// 上一页文字
/// </summary>
public string PrevPageText
{
    get
    {
        return _prevPageText;
    }
    set
    {
        _prevPageText = value;
    }
}
/// <summary>
/// 下一页文字
/// </summary>
public string NextPageText
{
    get
    {
        return _nextPageText;
    }
    set
    {
        _nextPageText = value;
    }
}
/// <summary>
/// 第一页文字
/// </summary>
public string FirstPageText
{
    get
    {
        return _firstPageText;
    }
    set
    {
        _firstPageText = value;
    }
}
/// <summary>
/// 最后一页文字
/// </summary>
public string LastPageText
{
    get
    {
        return _lasePageText;
    }
    set
    {
        _lasePageText = value;
    }
}
/// <summary>
/// 是否显示第一页和最后一页
/// </summary>
public bool ShowFirstLast
{
    get { return _showFirstLast; }
    set { _showFirstLast = value; }
}
/// <summary>
/// 记录数
/// </summary>
public int RecordCount
{
    get { return _recordCount; }
    set { _recordCount = value; }
}
/// <summary>
/// 页大小
/// </summary>
public int PageSize
{
    get { return _pageSize; }
    set { _pageSize = value; }
}
/// <summary>
/// 分多少页
/// </summary>
public int PageCount
{
    get
    {
        if (RecordCount == 0)
        {
            return 1;
        }
        return (int)Math.Ceiling((double)RecordCount / (double)PageSize);
    }
}
/// <summary>
/// 当前页
/// </summary>
public int CurrentPageIndex
{
    set
    {
        _currPageIndex = value;
        if (_currPageIndex < 1)
        {
            _currPageIndex = 1;
        }
    }
    get
    {

        if (_currPageIndex > PageCount && PageCount > 0)
        {
            _currPageIndex = PageCount;
        }
        if (_currPageIndex < 1)
        {
            _currPageIndex = 1;
        }
        return _currPageIndex;
    }

}
/// <summary>
/// 当前页的URL地址
/// </summary>
public string PageURL { get; set; }
/// <summary>
/// 页导航或页跳转显示链接数
/// </summary>
public int ShowNum
{
    get { return _showNum; }
    set { _showNum = value; }
}
/// <summary>
/// 分页样式
/// </summary>
public string Class
{
    get { return _class; }
    set { _class = value; }
}
/// <summary>
/// 是否在页导航元素中显示更多页按钮。
/// </summary>
public bool ShowMoreButtons
{
    get { return _ShowMoreButtons; }
    set { _ShowMoreButtons = value; }
}
/// <summary>
/// 是否在页导航元素中显示页索引数值按钮。
/// </summary>
public bool ShowPageIndex
{
    get { return _ShowPageIndex; }
    set { _ShowPageIndex = value; }
}

基本字段设置内容比较多,大部分都有默认值了。可以不用管,下面介绍分页方法

分页方法

public string pager()
{
    string pageURL = PageURL;
           

    int totalPageCount = PageCount;//num3 共多少页
    int pageIndex = CurrentPageIndex;//num 当前页码
    int NumericButtonCount = ShowNum;
    string PageControl = string.Empty;
    //显示页导航元素
    string startMoreButtons = string.Empty;
    string endMoreButtons = string.Empty;
    int startIndex = ((CurrentPageIndex - 1) / NumericButtonCount) * NumericButtonCount;
    int endIndex = ((startIndex + NumericButtonCount) > PageCount)
                        ? PageCount
                        : (startIndex + NumericButtonCount);

    if (ShowMoreButtons && startIndex > 0)
    {
        startMoreButtons = $"<li><a href=\"{string.Format(PageURL, startIndex)}\">...</a></li>";
    }
    if (ShowPageIndex)
    {
        for (int i = startIndex + 1; i <= endIndex; i++)
        {
            if (i == pageIndex)
            {
                PageControl = PageControl + string.Format("<li class=\"active\"><span>{0}</span></li>", i.ToString());
            }
            else
            {
                PageControl = PageControl + string.Format("<li><a href=\"{0}\">{1}</a></li>", string.Format(pageURL, i.ToString()), i.ToString());
            }
        }
        PageControl = startMoreButtons + PageControl;
    }
    if (ShowMoreButtons && (totalPageCount > ShowNum) && ((endIndex < PageCount) || (PageCount > endIndex + 1)))
    {
        endMoreButtons = $"<li><a href=\"{string.Format(PageURL, (endIndex + 1))}\">...</a></li>";
    }
    PageControl = PageControl + endMoreButtons;

           

    if (pageIndex != 1)
    {
        PageControl = string.Format("<li><a href=\"{0}\">{1}</a></li>", string.Format(pageURL, (pageIndex - 1).ToString()), PrevPageText) + PageControl;
    }
    else
    {
        PageControl = string.Format("<li class=\"disabled\"><span>{0}</span></li>", PrevPageText) + PageControl;
    }
    if (pageIndex != totalPageCount)
    {
        PageControl = PageControl + string.Format("<li><a href=\"{0}\">{1}</a></li>", string.Format(pageURL, (pageIndex + 1).ToString()), NextPageText);
    }
    else
    {
        PageControl = PageControl + string.Format("<li class=\"disabled\"><span>{0}</span></li>", NextPageText);
    }


    string FirstPage = string.Format("<li><a href=\"{0}\">{1}</a><li>", string.Format(pageURL, "1"), FirstPageText);
    string LastPage = string.Format("<li><a href=\"{0}\" class=\"last\">{1}</a></li>", string.Format(pageURL, totalPageCount.ToString()), LastPageText);

    if (ShowFirstLast)
    {
        PageControl = FirstPage + PageControl;
        PageControl = PageControl + LastPage;
    }
    //完成容器包装
    PageControl = string.Format("<ul{0}>", string.IsNullOrEmpty(Class) ? "" : " class=\"" + Class + "\"") + PageControl + "</ul>";
    pageURL = PageControl;
    return pageURL;
}

代码主要是根据分页数、当前页以及需要显示几页,来计算是否显示更多页的按钮,代码还可以设置是否显示第一页和最后一页,可以设置是否显示更多页按钮。还可以设置上一页,下一页的的文字以及首页和末页的文字。

实际应用

[Route("/news/list?page={pageIndex}")]
public async Task<IActionResult> List(int pageIndex)
{

    PageHelper pager = new PageHelper();
    pager.PageURL = "/news/list?page={0}";
    pager.PageSize = 10;
    pager.CurrentPageIndex = pageIndex;
    pager.Class = "pagination";
    pager.ShowNum = 5;
    pager.ShowFirstLast = true;
    pager.NextPageText = "&gt;";//默认是下一页
    pager.PrevPageText = "&lt;";//默认是上一页
    pager.FirstPageText = "&lt;&lt;";//默认是首页
    pager.LastPageText = "&gt;&gt;";//默认是末页
    pager.ShowFirstLast = false;
    var list = await _article_provider.GetPageListAsync();
    pager.RecordCount = list.count;
    return View(Tuple.Create(list.data, pager));
}

使用Tuple将数据与分页传递到前端,前端需要输出一下分页:

 @model Tuple<List<news>,PageHelper>
 @Html.Raw(Model.Item2.pager())

自己完的一个CSS

自己写了一个前端的css样式。分享给大家作为参考:

.pagination{text-align:center; padding:20px 40px;}
.pagination li{display:inline-block; margin:0 5px;}
.pagination li span,.pagination li a{display:block;background:#fff; height:34px; line-height:34px; padding:0 12px; border:1px #edecec solid;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;-o-user-select: none;user-select: none;}
.pagination li.active span,.pagination li.active a{background:#f7a511; color:#fff; border:1px #f7a511 solid;}
.pagination li.disabled span,.pagination li.disabled a{color:#edecec;}
.pagination li a:hover{background:#f7a511; color:#fff; border:1px #f7a511 solid;}

因为在应用中,给定的css是pagination,所以css定义pagination样式就可以啦!

总结

新建一个类,给类起个名字,把代码贴进去就可以使用了!

点击下方公众号卡片,关注我!一起学习,一起进步!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/66717.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文投稿指南——中文核心期刊推荐(电子、通信技术)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384;&#x1f388; 核心期刊在国内的应用范围非常广&#xff0c;核心期刊发表很多是国内作者晋升中的硬性要求&#xff0c;在…

springboot基础

目录 一、springboot介绍 1、什么是SpringBoot 二、springboot入门案列 2.1、使用idea自动生成springboot工程 2.1.1、用idea自动生成springboot 2.1.2、spring程序与springboot程序对比 三、springboot启动原理 3.1、parent 3.2、starter 3.3、引导类 3.4、内嵌tomc…

3dmax 单位匹配和基本单位设置

使用3dmax打开模型&#xff0c;出现下图对话框&#xff1b; 打开文件的单位和系统的单位不匹配&#xff0c;文件的单位是米&#xff0c;系统的单位是英寸&#xff1b;有2个选择&#xff0c;重置文件的单位为系统的单位&#xff0c;采用文件自己的单位&#xff1b; 用后一个打开…

C语言第十六课:操作符详解(下)——逗号表达式、下标引用、函数调用、结构成员操作符与操作符属性

目录 前言&#xff1a; 一、逗号表达式&#xff08;exp1&#xff0c;exp2&#xff0c;exp3&#xff0c;...&#xff0c;expN&#xff09;&#xff1a; 二、下标引用、函数调用和结构成员[ ]、( )、. 、->&#xff1a; 1.下标引用操作符[ ]&#xff1a; 2.函数调用操作符( …

NoSQL之Redis配置与优化

目录 一、redis简介 1、redis的优点 2、redis的缺点 3、redis应用场景 4、redis为什么这么快 5、redis与memcached比较 二、关系数据库与非关系型数据 1、关系型数据库 2、非关系型数据库 3、关系型数据库和非关系型数据库区别 三、redis安装部署 四、redis命令工具…

一套完整的养老院人员定位解决方案包含哪些内容?

养老院人员定位解决方案是建立面向社区及养老组织的传感网系统与信息渠道&#xff0c;并在此基础上提供实时、方便、高效、低成本的、物联化、互联化、智能化的养老服务。 人口老龄化问题早已成为当今社会关注的重要问题之一。在养老院封闭的环境&#xff0c;养老院希望利用智能…

解放程序员双手——ChatGPT安装踩雷之路+使用体验

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;专栏推荐&#xff1a;深度学习网络原理与实战 &#x1f34a;近期目标&#xff1a;写好专栏的每一篇文章 &#x1f34a;支持小苏&#xff1a;点赞&#x1f44d;&#x1f3fc;、…

数据之道读书笔记-10未来已来:数据成为企业核心竞争力

数据之道读书笔记-10未来已来&#xff1a;数据成为企业核心竞争力 数字化转型不能一蹴而就&#xff0c;数据治理也不是一朝一夕之功。数字化转型带来机遇的同时&#xff0c;也给整个企业的数据治理带来了新的挑战。 基于对华为公司数字化转型的解读&#xff0c;我们建立了数据…

Win11的两个实用技巧系列之查看所有用户帐户、应用冻结

目录 如何在Win11上查看所有用户帐户?Win11上查看所有用户帐户四种方法 方法一&#xff1a;在 Windows 11 的“设置”中检查所有帐户 方法二&#xff1a;在 Windows 11 的计算机管理中检查所有帐户 方法三&#xff1a;在 Windows 11 上通过命令提示符检查所有帐户 方法四&am…

【微信小程序】商品管理-微信小程序项目开发入门

有个人家开店&#xff0c;店里商品堆积越来越多&#xff0c;多了就不好管理了&#xff0c;那有没有想过需要类似于商品管理的一套小程序呢&#xff0c;这里给大家提供一个容易上手的商品管理微信小程序解决方案&#xff0c;非常适合新手学习入门。 先说明一下这里讲得是一个微信…

《python 数据可视化基础》第三章 散点图 scatter

第三章 散点图 scatter 参考自官方文档&#xff1a;https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.scatter.html#matplotlib.axes.Axes.scatter matplotblib 绘制散点图常用参数&#xff1a; x, y&#xff1a;一个或者多个点的位置&#xff1b;s&#xff1…

Halcon快速入门

前言一&#xff0c;HALCON 概述1.1&#xff0c;HALCON 安装二&#xff0c;HALCON 架构 2.1&#xff0c;算子 2.1.1&#xff0c;参数和数据结构 2.2&#xff0c;拓展包2.3&#xff0c;接口 2.3.1&#xff0c;HALCON-Python 接口2.3.2&#xff0c;HALCON-C 接口2.3.3&#xff0c;…

[附源码]Python计算机毕业设计SSM家政服务预约小程序(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

开源版商城源码V2.0【小程序 + H5+ 公众号 + APP】

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 这是一款轻量级、高性能、前后端分离的电商系统&#xff0c;&#xff0c;支持微信小程序 H5 公众号 APP&#xff0c;前后端源码完全开源&#xff0c;看见及所得&#xff0c;完美支持二…

[附源码]Python计算机毕业设计SSM家政服务管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

vue中的h函数与JSX语法

vue不仅像react一样实现了jsx&#xff0c;而且还借助jsx发挥了javascript动态画的优势&#xff0c;了解学习jsx可以让你更灵活的开发需求。 一、 h函数 在聊vue中的JSX之前&#xff0c;需要简单介绍一下 h 函数&#xff0c;理解了 h 函数&#xff0c;会更好的理解JSX。 1.h函…

[附源码]计算机毕业设计基于Springboot作业管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

WebLogic JVM Core dumps文件的生成控制

一&#xff0c;背景 当我们运行的WebLogic JVM发生Fatal Error时&#xff0c;会造成JVM crash掉&#xff0c;进而造成进程终止。一般来说crash的时间我们是无法估计在什么时候的&#xff0c;它具有很大的偶然性&#xff0c;因此理论上有时我们希望自动产生Core dump文件来提供…

figma有哪些快速入门的好用技巧

使用Figma在创建设计系统或处理大型设计项目时&#xff0c;总会涉及批量修改.快速定位.自动布局问题&#xff0c;MarcAndrew这篇文章分享了技巧&#xff0c;可以大大提高设计效率&#xff0c;希望对大家有所帮助: 在这篇文章中&#xff0c;我列出了一些快速简单的方法来帮助你…

YoLo V3 SPP u模型的讲解与总结

一。mosaic图像增强 其实就是将多张图片给汇总到一起&#xff0c;在源码当中就是默认使用4张图片进行拼接&#xff0c;进行预测。 优点&#xff1a; 增加数据的多样性增加目标个数BN能一次性统计多张图片的参数&#xff08;变相的增加了&#xff0c;输入一张图片其实就已经包…