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 { ... })
设计优点
- 灵活性:提供多种重载方法适应不同使用场景
- 易用性:扩展方法让语法更简洁
- 健壮性:包含参数验证和空值检查
- 可扩展性:支持自定义
PagerOptions配置
这个扩展类是一个典型的ASP.NET Core分页组件实现,为开发者提供了便捷的分页UI生成功能。
AI 正在分析代码…
评论加载中...