using System;
using Microsoft.AspNetCore.Mvc.Rendering;

namespace Dpz.Core.Web.Pager;

/// <summary>
/// 表示在应用程序中支持 HtmlPager 和 AjaxPager。
/// </summary>
public static class PagerExtensions
{
    /// <summary>
    /// 使用要分页的总记录数、每页显示记录数、当前页索引和PagerOptions设置构建HtmlPager
    /// </summary>
    /// <param name="helper">HTMLHelper 实例</param>
    /// <param name="totalItemCount">要分页的总记录数</param>
    /// <param name="pageSize">每页显示的记录数</param>
    /// <param name="pageIndex">当前页索引</param>
    /// <param name="pagerOptions">选项</param>
    /// <returns>HtmlPager对象</returns>
    public static HtmlPager Pager(
        this IHtmlHelper helper,
        int totalItemCount,
        int pageSize,
        int pageIndex,
        PagerOptions pagerOptions
    )
    {
        return new HtmlPager(helper, totalItemCount, pageSize, pageIndex, pagerOptions);
    }

    /// <summary>
    /// 使用要分页的总记录数、每页显示记录数、当前页索引构建HtmlPager
    /// </summary>
    /// <param name="helper">HTMLHelper 实例</param>
    /// <param name="totalItemCount">要分页的总记录数</param>
    /// <param name="pageSize">每页显示记录数</param>
    /// <param name="pageIndex">当前页索引</param>
    /// <returns>HtmlPager对象</returns>
    public static HtmlPager Pager(
        this IHtmlHelper helper,
        int totalItemCount,
        int pageSize,
        int pageIndex
    )
    {
        return new HtmlPager(helper, totalItemCount, pageSize, pageIndex);
    }

    /// <summary>
    /// 使用包含分页数据的IPagedList对象构建HtmlPager
    /// </summary>
    /// <param name="helper">HTMLHelper 实例</param>
    /// <param name="pagedList">包含要分页数据的IPagedList对象</param>
    /// <returns>HtmlPager对象</returns>
    public static HtmlPager Pager(this IHtmlHelper helper, IPagedList pagedList)
    {
        if (pagedList == null)
        {
            throw new ArgumentNullException(nameof(pagedList));
        }
        return new HtmlPager(
            helper,
            pagedList.TotalItemCount,
            pagedList.PageSize,
            pagedList.CurrentPageIndex,
            null
        );
    }

    /// <summary>
    /// 使用包含分页数据的IPagedList对象和PagerOptions设置构建HtmlPager
    /// </summary>
    /// <param name="helper">HTMLHelper 实例</param>
    /// <param name="pagedList">包含要分页数据的IPagedList对象</param>
    /// <param name="pagerOptions">选项</param>
    /// <returns>HtmlPager对象</returns>
    public static HtmlPager Pager(
        this IHtmlHelper helper,
        IPagedList pagedList,
        PagerOptions pagerOptions
    )
    {
        if (pagedList == null)
        {
            throw new ArgumentNullException(nameof(pagedList));
        }
        return Pager(
            helper,
            pagedList.TotalItemCount,
            pagedList.PageSize,
            pagedList.CurrentPageIndex,
            pagerOptions
        );
    }
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

这是一个用于ASP.NET Core Web应用程序的分页器扩展类,主要功能是为HTML Helper提供分页功能的扩展方法。让我详细解释一下这个代码:

代码概述

PagerExtensions 是一个静态扩展类,为 IHtmlHelper 接口添加了多个重载的 Pager 扩展方法,用于创建HTML分页器组件。

主要功能

1. 扩展方法设计

  • 使用 this IHtmlHelper helper 参数,表明这些是扩展方法
  • 可以直接在Razor视图中通过 @Html.Pager() 调用

2. 四个重载方法

方法1:完整参数版本

public static HtmlPager Pager(this IHtmlHelper helper, int totalItemCount, 
    int pageSize, int pageIndex, PagerOptions pagerOptions)
  • 提供所有必需参数和自定义选项
  • 返回配置完整的 HtmlPager 对象

方法2:基础参数版本

public static HtmlPager Pager(this IHtmlHelper helper, int totalItemCount, 
    int pageSize, int pageIndex)
  • 使用默认的分页选项
  • 适用于简单的分页需求

方法3:使用IPagedList对象

public static HtmlPager Pager(this IHtmlHelper helper, IPagedList pagedList)
  • 接受实现了 IPagedList 接口的分页数据对象
  • 从对象中提取分页信息(总数、页大小、当前页)
  • 包含空值检查,提供更好的错误处理

方法4:IPagedList + 自定义选项

public static HtmlPager Pager(this IHtmlHelper helper, IPagedList pagedList, 
    PagerOptions pagerOptions)
  • 结合了 IPagedList 对象和自定义选项
  • 内部调用第一个重载方法,保持代码复用

使用场景

在Razor视图中的典型用法:

<!-- 基础用法 -->
@Html.Pager(1000, 10, 1)

<!-- 使用分页对象 -->
@Html.Pager(Model.PagedData)

<!-- 带自定义选项 -->
@Html.Pager(Model.PagedData, new PagerOptions { ... })

设计优点

  1. 灵活性:提供多种重载方法适应不同使用场景
  2. 易用性:扩展方法让语法更简洁
  3. 健壮性:包含参数验证和空值检查
  4. 可扩展性:支持自定义 PagerOptions 配置

这个扩展类是一个典型的ASP.NET Core分页组件实现,为开发者提供了便捷的分页UI生成功能。

评论加载中...