C#页码导航显示及算法实现代码

当网站中的内容较多时,常常需要用到分页功能来实现良好的用户体验。下面就是C#页码导航的实现。

一、分页算法

如何实现分页?我们需要首先确定一页要显示的记录数(pageSize)和当前页码(currentPageNum),其次需要得到数据表中数据总数(totalCount),然后根据这三个值来计算总的页数(totalPageNum)。

totalPageNum = Math.Ceiling(totalCount / (double)pageSize);

同时,需要考虑到特殊情况,如总记录数为0,或者不足一页时等。

二、C#页码导航代码实现

示例一:实现简单的页码导航功能,代码如下:

public static string GetPageNav(int totalCount, int currentPageNum, int pageSize, string url)
{
    StringBuilder pageNavHtml = new StringBuilder();

    int totalPageNum = (int)Math.Ceiling(totalCount / (double)pageSize);

    if (totalPageNum > 1)
    {
        pageNavHtml.Append("<div class=\"pagination\">");

        if (currentPageNum > 1)
        {
            pageNavHtml.Append("<a href=\"" + url + "&page=" + (currentPageNum - 1) + "\">上一页</a>");
        }

        for (int i = 1; i <= totalPageNum; i++)
        {
            if (i == currentPageNum)
            {
                pageNavHtml.Append("<span class=\"current_page\">" + i + "</span>");
            }
            else
            {
                pageNavHtml.Append("<a href=\"" + url + "&page=" + i + "\">" + i + "</a>");
            }
        }

        if (currentPageNum < totalPageNum)
        {
            pageNavHtml.Append("<a href=\"" + url + "&page=" + (currentPageNum + 1) + "\">下一页</a>");
        }

        pageNavHtml.Append("</div>");
    }

    return pageNavHtml.ToString();
}

该代码实现了一个简单的分页导航功能,展示形式如下:

上一页 1 2 3 4 5 下一页

示例二:提供了更多的自定义参数,更灵活的用法,代码如下:

public static string GetPageNavCustom(int totalCount, int currentPageNum, int pageSize, string url, string prevText, string nextText, string ellipseText, string currentClass, string pageClass)
{
    StringBuilder pageNavHtml = new StringBuilder();

    int totalPageNum = (int)Math.Ceiling(totalCount / (double)pageSize);

    if (totalPageNum > 1)
    {
        pageNavHtml.Append("<div class=\"pagination\">");

        if (currentPageNum > 1)
        {
            pageNavHtml.Append("<a href=\"" + url + "&page=" + (currentPageNum - 1) + "\">" + prevText + "</a>");
        }

        if (totalPageNum <= 7)
        {
            for (int i = 1; i <= totalPageNum; i++)
            {
                if (i == currentPageNum)
                {
                    pageNavHtml.Append("<span class=\"" + currentClass + "\">" + i + "</span>");
                }
                else
                {
                    pageNavHtml.Append("<a class=\"" + pageClass + "\" href=\"" + url + "&page=" + i + "\">" + i + "</a>");
                }
            }
        }
        else
        {
            int half = 3;
            int start = Math.Max(1, currentPageNum - half);
            int end = Math.Min(start + 6, totalPageNum);

            if (start > 1)
            {
                pageNavHtml.Append("<a class=\"" + pageClass + "\" href=\"" + url + "&page=1\">1</a>");
                pageNavHtml.Append("<span class=\"ellipse\">" + ellipseText + "</span>");
            }

            for (int i = start; i <= end; i++)
            {
                if (i == currentPageNum)
                {
                    pageNavHtml.Append("<span class=\"" + currentClass + "\">" + i + "</span>");
                }
                else
                {
                    pageNavHtml.Append("<a class=\"" + pageClass + "\" href=\"" + url + "&page=" + i + "\">" + i + "</a>");
                }
            }

            if (end < totalPageNum)
            {
                pageNavHtml.Append("<span class=\"ellipse\">" + ellipseText + "</span>");
                pageNavHtml.Append("<a class=\"" + pageClass + "\" href=\"" + url + "&page=" + totalPageNum + "\">" + totalPageNum + "</a>");
            }
        }

        if (currentPageNum < totalPageNum)
        {
            pageNavHtml.Append("<a href=\"" + url + "&page=" + (currentPageNum + 1) + "\">" + nextText + "</a>");
        }

        pageNavHtml.Append("</div>");
    }

    return pageNavHtml.ToString();
}

该代码实现了一个更加灵活自定义的分页导航功能,展示形式如下:

上一页 1 2 3 4 … 8 下一页

三、总结

以上就是C#页码导航的实现攻略。我们需要首先明确分页算法以及总页数,然后根据自身需求实现自定义的页码导航功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#页码导航显示及算法实现代码 - Python技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • 详解ASP.NET Core 网站发布到Linux服务器

    详解ASP.NET Core 网站发布到Linux服务器 在ASP.NET Core中,我们可以将网站发布到Linux服务器上。本攻略将详细介绍如何将ASP.NET Core网站发布到Linux服务器上,并提供两个示例说明。 准备工作 在将ASP.NET Core网站发布到Linux服务器之前,我们需要完成以下准备工作: 安装.NET Core SDK和AS…

    C# 2023年5月16日
    00
  • 用C#破解Chrome浏览器cookie值

    背景 最近小编接到一个获取网站请求数据的需求,要求抓取网站某个页面请求的数据。我使用Google Chrome浏览器查看了一下请求链接的传入参数,发现需要传入一个Token值才能获取数据。于是我在Chrome中登录后,通过Postman请求成功,并将Token存储到了Cookie中。然而问题又来了,在代码层面如何获取这个Token呢? 解决方案 小编在网上查…

    C# 2023年4月18日
    00
  • MASA MinimalAPI源码解析:为什么我们只写了一个app.MapGet,却生成了三个接口

    源码解析:为什么我们只写了一个app.MapGet,却生成了三个接口 1.ServiceBase 1.AutoMapRoute 源码如下: AutoMapRoute自动创建map路由,MinimalAPI会根据service中的方法,创建对应的api接口。 比如上文的一个方法: public async Task<WeatherForecast[]&g…

    C# 2023年5月5日
    00
  • 使用C#实现基于TCP和UDP协议的网络通信程序的基本示例

    下面我会为您详细讲解如何使用C#实现基于TCP和UDP协议的网络通信程序的基本示例。 一、基本概念介绍 在开始编写网络应用程序之前,需要我们明确一些基本的概念。- TCP协议: 传输控制协议(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层协议,常用于HTTP/HTTPS、SMTP、POP3等应用层协议…

    C# 2023年6月7日
    00
  • C# 调用命令行执行Cmd命令的操作

    C# 调用命令行执行 Cmd 命令可以通过使用 Process 类实现。下面是具体步骤: 1. 引用命名空间 在 C# 中使用 Process 类需要引用 System.Diagnostics 命名空间,因此需要在文件头部添加以下代码: using System.Diagnostics; 2. 创建 Process 对象 创建一个 Process 对象,可以…

    C# 2023年6月7日
    00
  • c# 生成随机时间的小例子

    下面是“c# 生成随机时间的小例子”的完整攻略。 需求分析 我们希望在c#中生成一些随机的时间点(可以是任意时间,也可以是在某个时间范围内的随机时间),以便在一些测试场景下使用。 根据需求,我们需要实现的功能如下: 生成指定个数的随机时间点 可以指定时间范围 生成的时间点要保证随机性 为了实现这些功能,我们可以使用c#提供的DateTime类型和Random…

    C# 2023年6月1日
    00
  • C#中定时任务被阻塞问题的解决方法

    非常感谢您对C#定时任务的关注。在C#中实现定时任务有很多种方式,例如使用定时器、后台线程等,但是在实际开发过程中,我们大多会使用System.Timers.Timer来实现定时任务。System.Timers.Timer提供了很多优秀的功能,例如自动重置、执行一次、多次等。然而在使用System.Timers.Timer时,我们可能会遇到定时任务被阻塞问题…

    C# 2023年5月15日
    00
  • 浅谈C#下winform和JS的互相调用和传参(webbrowser)

    浅谈C#下winform和JS的互相调用和传参(webbrowser) 在C#开发中,WinForms是常见的桌面应用程序开发方式,而JavaScript(简称JS)则是Web前端开发中的基础语言,两者有时需要相互调用和传参,下面是一个完整攻略。 1.首先,在WinForms中内置了一个WebBrowser控件,可以加载HTML页面并且可以调用JavaScr…

    C# 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部