ASP.NET MVC4 HtmlHelper扩展类,实现分页功能

ASP.NET MVC4是一种Web应用程序框架,它提供了一种模型-视图-控制器(MVC)的架构模式,用于构建可扩展的Web应用程序。在ASP.NET MVC4中,HtmlHelper是一个非常有用的类,它提供了许多有用的方法,例如生成HTML标记、表单、分页等。在本文中,我们将介绍如何使用HtmlHelper扩展类来实现分页功能。

步骤一:创建HtmlHelper扩展类

首先,我们需要创建一个名为PagingHelper的HtmlHelper扩展类。在该类中,我们将定义一个名为Paging的方法,该方法将用于生成分页HTML标记。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MyProject.Helpers
{
    public static class PagingHelper
    {
        public static MvcHtmlString Paging(this HtmlHelper html, int currentPage, int totalPages, Func<int, string> pageUrl)
        {
            var builder = new TagBuilder("div");
            builder.AddCssClass("pagination");

            var ul = new TagBuilder("ul");

            for (int i = 1; i <= totalPages; i++)
            {
                var li = new TagBuilder("li");

                if (i == currentPage)
                {
                    li.AddCssClass("active");
                }

                var a = new TagBuilder("a");
                a.MergeAttribute("href", pageUrl(i));
                a.InnerHtml = i.ToString();

                li.InnerHtml = a.ToString();

                ul.InnerHtml += li.ToString();
            }

            builder.InnerHtml = ul.ToString();

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

在上面的代码中,我们定义了一个名为Paging的方法,该方法接受三个参数:

  • currentPage:当前页码。
  • totalPages:总页数。
  • pageUrl:一个委托,用于生成每个页码的URL。

在该方法中,我们使用TagBuilder类来生成HTML标记。我们首先创建一个div元素,并将其添加到一个名为pagination的CSS类中。然后,我们创建一个ul元素,并使用一个循环来生成每个页码的li元素。如果当前页码等于循环变量i,则我们将li元素添加到一个名为active的CSS类中。最后,我们创建一个a元素,并将其添加到li元素中。我们使用pageUrl委托来生成每个页码的URL。最后,我们将所有的HTML标记添加到div元素中,并返回一个MvcHtmlString对象。

步骤二:使用HtmlHelper扩展类

在我们创建了PagingHelper类之后,我们可以在视图中使用Paging方法来生成分页HTML标记。以下是一个示例视图,用于演示如何使用Paging方法:

@using MyProject.Helpers

@{
    ViewBag.Title = "My Page";
}

<h2>My Page</h2>

<div>
    @Html.Paging(2, 10, i => Url.Action("Index", new { page = i }))
</div>

在上面的代码中,我们首先使用@using指令导入MyProject.Helpers命名空间,以便我们可以在视图中使用Paging方法。然后,我们使用@Html.Paging语法来调用Paging方法,并传递当前页码、总页数和一个委托,该委托用于生成每个页码的URL。在本例中,我们使用Url.Action方法来生成URL,该方法将调用名为Index的控制器方法,并传递一个名为page的参数。

示例一:使用Bootstrap样式

如果您正在使用Bootstrap样式,您可以使用以下代码来修改PagingHelper类,以便生成Bootstrap样式的分页HTML标记:

public static MvcHtmlString Paging(this HtmlHelper html, int currentPage, int totalPages, Func<int, string> pageUrl)
{
    var builder = new TagBuilder("div");
    builder.AddCssClass("pagination");

    var ul = new TagBuilder("ul");

    if (currentPage == 1)
    {
        ul.InnerHtml += "<li class=\"disabled\"><span>&laquo;</span></li>";
    }
    else
    {
        var li = new TagBuilder("li");
        var a = new TagBuilder("a");
        a.MergeAttribute("href", pageUrl(currentPage - 1));
        a.InnerHtml = "&laquo;";
        li.InnerHtml = a.ToString();
        ul.InnerHtml += li.ToString();
    }

    for (int i = 1; i <= totalPages; i++)
    {
        var li = new TagBuilder("li");

        if (i == currentPage)
        {
            li.AddCssClass("active");
        }

        var a = new TagBuilder("a");
        a.MergeAttribute("href", pageUrl(i));
        a.InnerHtml = i.ToString();

        li.InnerHtml = a.ToString();

        ul.InnerHtml += li.ToString();
    }

    if (currentPage == totalPages)
    {
        ul.InnerHtml += "<li class=\"disabled\"><span>&raquo;</span></li>";
    }
    else
    {
        var li = new TagBuilder("li");
        var a = new TagBuilder("a");
        a.MergeAttribute("href", pageUrl(currentPage + 1));
        a.InnerHtml = "&raquo;";
        li.InnerHtml = a.ToString();
        ul.InnerHtml += li.ToString();
    }

    builder.InnerHtml = ul.ToString();

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

在上面的代码中,我们修改了PagingHelper类,以便生成Bootstrap样式的分页HTML标记。我们首先检查当前页码是否等于1,如果是,则我们将&laquo;添加到一个名为disabled的CSS类中。否则,我们将&laquo;添加到一个a元素中,并将其添加到一个名为previous的CSS类中。我们使用pageUrl委托来生成前一页的URL。

然后,我们使用一个循环来生成每个页码的li元素,与之前的示例相同。如果当前页码等于循环变量i,则我们将li元素添加到一个名为active的CSS类中。最后,我们检查当前页码是否等于总页数,如果是,则我们将&raquo;添加到一个名为disabled的CSS类中。否则,我们将&raquo;添加到一个a元素中,并将其添加到一个名为next的CSS类中。我们使用pageUrl委托来生成下一页的URL。

示例二:使用Ajax

如果您想要使用Ajax来实现分页,您可以使用以下代码来修改PagingHelper类,以便生成Ajax分页HTML标记:

public static MvcHtmlString Paging(this HtmlHelper html, int currentPage, int totalPages, Func<int, string> pageUrl, string updateTargetId)
{
    var builder = new TagBuilder("div");
    builder.AddCssClass("pagination");

    var ul = new TagBuilder("ul");

    if (currentPage == 1)
    {
        ul.InnerHtml += "<li class=\"disabled\"><span>&laquo;</span></li>";
    }
    else
    {
        var li = new TagBuilder("li");
        var a = new TagBuilder("a");
        a.MergeAttribute("href", "#");
        a.MergeAttribute("data-page", (currentPage - 1).ToString());
        a.InnerHtml = "&laquo;";
        li.InnerHtml = a.ToString();
        ul.InnerHtml += li.ToString();
    }

    for (int i = 1; i <= totalPages; i++)
    {
        var li = new TagBuilder("li");

        if (i == currentPage)
        {
            li.AddCssClass("active");
        }

        var a = new TagBuilder("a");
        a.MergeAttribute("href", "#");
        a.MergeAttribute("data-page", i.ToString());
        a.InnerHtml = i.ToString();

        li.InnerHtml = a.ToString();

        ul.InnerHtml += li.ToString();
    }

    if (currentPage == totalPages)
    {
        ul.InnerHtml += "<li class=\"disabled\"><span>&raquo;</span></li>";
    }
    else
    {
        var li = new TagBuilder("li");
        var a = new TagBuilder("a");
        a.MergeAttribute("href", "#");
        a.MergeAttribute("data-page", (currentPage + 1).ToString());
        a.InnerHtml = "&raquo;";
        li.InnerHtml = a.ToString();
        ul.InnerHtml += li.ToString();
    }

    builder.InnerHtml = ul.ToString();

    var script = new TagBuilder("script");
    script.InnerHtml = @"
        <script>
            $(function () {
                $('." + builder.Attributes["class"] + @" a').click(function (e) {
                    e.preventDefault();
                    var page = $(this).data('page');
                    $.get('" + pageUrl(0) + @"' + page, function (data) {
                        $('#" + updateTargetId + @"').html(data);
                    });
                });
            });
        </script>
    ";

    builder.InnerHtml += script.ToString();

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

在上面的代码中,我们修改了PagingHelper类,以便生成Ajax分页HTML标记。我们添加了一个名为updateTargetId的新参数,该参数用于指定应该更新的HTML元素的ID。我们使用TagBuilder类来生成HTML标记,与之前的示例相同。

然后,我们添加了一个名为script的新标记,该标记包含一个JavaScript函数,该函数将在用户单击页码时执行。该函数使用jQuery的$.get方法来获取指定页码的HTML内容,并将其添加到指定的HTML元素中。我们使用pageUrl委托来生成每个页码的URL。最后,我们将script标记添加到div元素中,并返回一个MvcHtmlString对象。

结论

通过本文的教程,您应该已经了解了如何使用HtmlHelper扩展类来实现分页功能。我们提供了两个示例,分别用于生成Bootstrap样式的分页HTML标记和Ajax分页HTML标记。请记住,HtmlHelper扩展类是一种非常有用的技术,它可以帮助您更轻松地生成HTML标记和表单。

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

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

相关文章

  • Asp.Net Core利用文件监视进行快速测试开发详解

    Asp.Net Core利用文件监视进行快速测试开发详解 在Asp.Net Core中,我们可以利用文件监视(File Watcher)来进行快速测试开发。文件监视可以在文件发生更改时自动重新编译和重新启动应用程序,从而加快开发速度。在本攻略中,我们将深入讲解如何利用文件监视进行快速测试开发,并提供两个示例说明。 步骤 以下是利用文件监视进行快速测试开发的步…

    C# 2023年5月17日
    00
  • ASP.NET Core单文件和多文件上传并保存到服务端的方法

    ASP.NET Core 单文件和多文件上传并保存到服务端的方法 在 ASP.NET Core 中,可以使用多种方式实现单文件和多文件上传并保存到服务端。本攻略将详细介绍 ASP.NET Core 单文件和多文件上传并保存到服务端的方法,并提供多个示例说明。 单文件上传 以下是一个简单的单文件上传示例: 在视图中添加文件上传表单: <form meth…

    C# 2023年5月17日
    00
  • Asp.NET 多层登陆实现代码

    本文将详细讲解如何利用 Asp.NET 实现多层登陆,以下是完整的实现攻略: 第一步:创建用户数据库 在创建用户数据库之前,必须先安装 Microsoft SQL Server 数据库并创建一个新的数据库。可以按照以下步骤创建一个新的用户数据库: 打开 Microsoft SQL Server 的管理工具(如SqlServer Management Stud…

    C# 2023年5月31日
    00
  • .NET Reflector8.5怎么激活?.NET Reflector安装激活使用详细图文教程

    以下是详细讲解 “.NET Reflector 8.5怎么激活?.NET Reflector安装激活使用详细图文教程” 的完整攻略。 安装.NET Reflector 8.5 首先,我们需要从官方网站下载最新版本的.NET Reflector 8.5并安装它。 获取激活码 然后,我们需要获取一个有效的激活码。你可以从官方网站购买一个许可证,也可以在互联网上寻…

    C# 2023年6月3日
    00
  • C# 6.0 新特性汇总

    当C#6.0发布后,引入了一些非常有用的新特性,为程序员提供了更好的编程体验。本文将为大家详细讲解C#6.0中的新特性并附带相应的代码示例。 1. 空值传递运算符 在C#6.0中,新增了一个空值传递运算符(?.),可以在访问一个对象的属性或者执行方法前判断该对象是否为空。如果该对象为空,则程序会直接返回null,不会抛出NullReferenceExcept…

    C# 2023年5月15日
    00
  • 手把手教你AspNetCore WebApi认证与授权的方法

    手把手教你AspNetCore WebApi认证与授权的方法 在ASP.NET Core WebApi中,认证和授权是非常重要的安全措施。在本攻略中,我们将介绍如何在ASP.NET Core WebApi中实现认证和授权,并提供两个示例说明。 步骤一:添加认证和授权中间件 首先,需要在ASP.NET Core WebApi中添加认证和授权中间件。可以使用以下…

    C# 2023年5月17日
    00
  • C# Linq的Min()方法 – 返回序列中的最小值

    C#的Linq是一种强大的数据查询和操作工具,可以让程序员更加高效地使用各种数据源,其中Min()函数是Linq中常用的一个函数,接下来我们就来一步步讲解如何使用Min()函数。 Min()函数的简介 Min()是Linq中的一个聚合函数(Aggregation Function),可以用来在一组数据中找到最小值并返回。它可以用于各种类型的数据,包括整数、浮…

    C# 2023年4月19日
    00
  • 用juery的ajax方法调用aspx.cs页面中的webmethod方法示例

    使用jQuery的ajax方法调用aspx.cs页面中的WebMethod方法需要经过以下步骤: 在aspx.cs文件中创建一个公共静态方法,并使用WebMethod属性进行标记。这个方法将被用来提供JSON格式数据给前端。 以下是一个简单的示例: using System.Web.Services; using System.Web.Script.Seri…

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