MVC HtmlHelper扩展类(PagingHelper)实现分页功能

下面就为你详细介绍如何使用MVC HtmlHelper扩展类(PagingHelper)实现分页功能。

1. 什么是MVC HtmlHelper扩展类

在MVC开发中,HtmlHelper是负责生成HTML标签的对象,它可以帮助我们快速地生成表单、文本框、下拉框等HTML控件。而MVC HtmlHelper扩展类则是对HtmlHelper进行扩展,使其能够完成更加复杂的任务,比如实现分页、生成统一的表格等。

2. 实现步骤

2.1 定义PagingHelper类

我们首先需要定义一个名为PagingHelper的HtmlHelper扩展类,用于生成分页相关的HTML标记。代码示例如下:

public static class PagingHelper
{
    public static MvcHtmlString Pager(this HtmlHelper htmlHelper, int currentPage, int totalPages, string pageAction, int pageShowCount = 5, string cssClassName = "pagination")
    {
        var pageBuilder = new StringBuilder();
        var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
        pageBuilder.AppendFormat("<ul class='{0}'>", cssClassName);

        //生成首页链接
        var firstPage = $"<li><a href='{urlHelper.Action(pageAction, new { page = 1 })}'>首页</a></li>";
        pageBuilder.Append(firstPage);

        //生成上一页链接
        if (currentPage > 1)
        {
            var prevPage = $"<li><a href='{urlHelper.Action(pageAction, new { page = currentPage - 1 })}'>上一页</a></li>";
            pageBuilder.Append(prevPage);
        }

        //生成中间页码链接
        for (var i = 1; i <= totalPages; i++)
        {
            if (i <= currentPage + pageShowCount / 2 && i >= currentPage - pageShowCount / 2)
            {
                var pageLink = string.Empty;
                if (i == currentPage)
                {
                    pageLink = $"<li class='active'><a href='#'>{i}</a></li>";
                }
                else
                {
                    pageLink = $"<li><a href='{urlHelper.Action(pageAction, new { page = i })}'>{i}</a></li>";
                }

                pageBuilder.Append(pageLink);
            }
        }

        //生成下一页链接
        if (currentPage < totalPages)
        {
            var nextPage = $"<li><a href='{urlHelper.Action(pageAction, new { page = currentPage + 1 })}'>下一页</a></li>";
            pageBuilder.Append(nextPage);
        }

        //生成末页链接
        var lastPage = $"<li><a href='{urlHelper.Action(pageAction, new { page = totalPages })}'>末页</a></li>";
        pageBuilder.Append(lastPage);

        pageBuilder.Append("</ul>");

        return MvcHtmlString.Create(pageBuilder.ToString());
    }
}

以上代码定义了一个名为Pager的扩展方法,它会根据传入的参数生成分页相关的HTML标记。其中currentPage表示当前页码,totalPages表示总页数,pageAction表示分页的Action名称,pageShowCount表示最多显示页码数,cssClassName表示分页的样式。

2.2 在视图中使用PagingHelper

在视图中使用PagingHelper非常简单,只需通过Html.Pager方法调用即可,如下所示:

@Html.Pager(Model.CurrentPage, Model.TotalPages, "Index", 5, "pagination")

以上代码调用了Pager方法,生成了一个名为pagination的分页样式,最多显示5个页码,跳转到名为Index的分页Action。

3. 示例说明

示例1

首先,我们需要在MVC项目中创建一个名为Test的控制器,在Index方法中创建一些用于测试的数据,如下所示:

public ActionResult Index(int page = 1)
{
    const int pageSize = 10;
    var totalCount = 100;

    var startIndex = (page - 1) * pageSize;
    var endIndex = startIndex + pageSize - 1;

    if (endIndex >= totalCount)
    {
        endIndex = totalCount - 1;
    }

    var items = Enumerable.Range(startIndex, endIndex - startIndex + 1);

    var model = new TestViewModel
    {
        Items = items,
        TotalCount = totalCount,
        CurrentPage = page,
        TotalPages = (int)Math.Ceiling((double)totalCount / pageSize)
    };

    return View(model);
}

接着,在Index视图中调用Pager方法生成分页控件:

@model TestViewModel

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<table class="table">
    <thead>
        <tr>
            <th>ID</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model.Items)
        {
            <tr>
                <td>@item</td>
            </tr>
        }
    </tbody>
</table>

@Html.Pager(Model.CurrentPage, Model.TotalPages, "Index", 5, "pagination")

以上代码生成一个表格,并在下方生成一个名为pagination的分页控件。

示例2

接下来,我们可以对分页控件的样式进行自定义。我们可以在~/Content/site.css中添加如下样式:

.pagination {
    display: inline-block;
    padding-left: 0;
    margin: 20px 0;
    border-radius: 4px;
}

.pagination > li {
    display: inline;
}

.pagination > li > a {
    position: relative;
    float: left;
    padding: 6px 12px;
    margin-left: -1px;
    line-height: 1.42857143;
    text-decoration: none;
    background-color: #fff;
    border: 1px solid #ddd;
}

.pagination > li:first-child > a {
    margin-left: 0;
    border-top-left-radius: 4px;
    border-bottom-left-radius: 4px;
}

.pagination > li:last-child > a {
    border-top-right-radius: 4px;
    border-bottom-right-radius: 4px;
}

.pagination > .active > a {
    color: #fff;
    background-color: #337ab7;
    border-color: #337ab7;
}

.pagination > .active > a:hover {
    color: #fff;
    background-color: #286090;
    border-color: #204d74;
}

.pagination > li > a:hover,
.pagination > li > a:focus {
    background-color: #eee;
}

以上样式定义了分页控件的样式,包括颜色、边框、圆角等等。后面的代码则通过调用Pager方法并传入样式名称生成分页控件:

@Html.Pager(Model.CurrentPage, Model.TotalPages, "Index", 5, "pagination custom-paging")

通过以上方法,我们可以实现一个符合自己需求的、美观的分页控件。

这就是使用MVC HtmlHelper扩展类(PagingHelper)实现分页功能的攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MVC HtmlHelper扩展类(PagingHelper)实现分页功能 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • 基于Jenkins搭建.NET Core持续集成环境过程图解

    基于Jenkins搭建.NET Core持续集成环境过程图解 Jenkins是一个开源的自动化构建工具,可以用于构建、测试和部署软件。在本攻略中,我们将介绍如何使用Jenkins搭建.NET Core持续集成环境,并提供两个示例说明。 步骤一:安装Jenkins 安装Java Jenkins是基于Java开发的,因此需要先安装Java。可以从官方网站下载Ja…

    C# 2023年5月16日
    00
  • node thread.sleep实现示例

    让我来详细讲解一下“node thread.sleep实现示例”的完整攻略。 什么是node thread.sleep? 在 Node.js 中,有时候我们需要实现一个阻塞的效果,即在某些情况下,程序不能继续往下执行,而是等待一定的时间后再继续执行。这时我们可以使用类似于 Thread.sleep 的方法来实现阻塞效果,让程序暂停一段时间,再继续执行。 实现…

    C# 2023年6月6日
    00
  • c#通用登录模块分享

    C#通用登录模块分享 在网站或应用程序中,用户通常需要进行登录才能使用其功能。为了节省开发人员的时间和精力,我们可以编写一个通用登录模块,以供多个网站或应用程序共用。本篇文章将详细介绍如何实现这个通用登录模块。 实现基础功能 创建用户表 首先,我们需要在数据库中创建一个用户表(如MySQL、SQL Server、Oracle等),用于保存用户的登录信息。用户…

    C# 2023年5月31日
    00
  • C#学习教程之Socket的简单使用

    C#学习教程之Socket的简单使用 什么是Socket? Socket(套接字)是支持TCP/IP协议的网络通信方式,它是一种用于网络通信的编程接口或应用程序编程接口(API),使得两个进程之间可以通过网络进行数据交互。在 C# 中,可以使用 System.Net.Sockets 命名空间中的类来实现 Socket 的编程。 如何实现 Socket 编程?…

    C# 2023年6月6日
    00
  • asp.net 备份和恢复数据库的方法示例

    当我们在开发ASP.NET项目的时候,经常需要用到对数据库的备份和恢复。本文将详细介绍如何使用SQL Server Management Studio(SSMS)和Transact-SQL(T-SQL)备份和恢复数据库,以及在ASP.NET中使用C#代码备份和恢复数据库。 使用SQL Server Management Studio(SSMS)备份和恢复数据…

    C# 2023年5月31日
    00
  • 详解C#开发Android应用程序的流程

    详解C#开发Android应用程序的流程 一、开发环境配置 在开始C#开发Android应用程序之前,我们需要先配置好相应的开发环境: 1. 安装Visual Studio Visual Studio是C#程序开发的集成开发环境,可用于Windows和macOS平台。在Visual Studio官网下载对应操作系统的版本并安装。 2. 安装Visual St…

    C# 2023年6月7日
    00
  • 简述C#枚举高级战术

    下面是详细讲解“简述C#枚举高级战术”的完整攻略。 什么是枚举 枚举是一种特殊的数据类型,它表示一组有限的值,这组值被称为枚举成员。在C#中,我们使用enum关键字来定义枚举类型。下面是定义一个枚举类型的示例: enum Color { Red, Green, Blue } 这里我们定义了一个名为Color的枚举类型,它包含了三个枚举成员:Red、Green…

    C# 2023年5月14日
    00
  • Linux CentOS下docker部署Asp.Net Core(.Net6)

    Linux CentOS下docker部署Asp.Net Core(.Net6)攻略 在本攻略中,我们将深入讲解如何在Linux CentOS下使用docker部署Asp.Net Core(.Net6),并提供两个示例说明。 步骤一:安装docker 在使用docker部署Asp.Net Core(.Net6)之前,我们需要在Linux CentOS上安装d…

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