using System.Collections.Generic;
using Microsoft.AspNetCore.Routing;

namespace Dpz.Core.Web.Pager;

/// <summary>
/// 表示用于构建PagerOptions对象的辅助对象。
/// </summary>
public class PagerOptionsBuilder(PagerOptions pagerOptions)
{
    /// <summary>
    /// 设置 PagerOptions 的 Action 属性
    /// </summary>
    /// <param name="actionName"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetAction(string actionName)
    {
        pagerOptions.Action = actionName;
        return this;
    }

    /// <summary>
    /// 设置 PagerOptions 的 Controller 属性
    /// </summary>
    /// <param name="controllerName"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetController(string controllerName)
    {
        pagerOptions.Controller = controllerName;
        return this;
    }

    /// <summary>
    /// 设置 PagerOptions 的 Area 属性
    /// </summary>
    /// <param name="areaName"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetArea(string areaName)
    {
        pagerOptions.Area = areaName;
        return this;
    }

    /// <summary>
    /// 向 PagerOptions 的 HtmlAttributes 属性添加项。
    /// </summary>
    /// <param name="key"></param>
    /// <param name="value"></param>
    /// <returns></returns>
    public PagerOptionsBuilder AddHtmlAttribute(string key, object value)
    {
        pagerOptions.HtmlAttributes ??= new Dictionary<string, object>();
        pagerOptions.HtmlAttributes[key] = value;
        return this;
    }

    /// <summary>
    /// 设置 PagerOptions 的 OnPageIndexError 属性
    /// </summary>
    /// <param name="handler"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetOnPageIndexError(string handler)
    {
        pagerOptions.OnPageIndexError = handler;
        return this;
    }

    /// <summary>
    /// 向 PagerOptions 的 RouteValues 属性添加项
    /// </summary>
    /// <param name="key"></param>
    /// <param name="value"></param>
    /// <returns></returns>
    public PagerOptionsBuilder AddRouteValue(string key, object value)
    {
        pagerOptions.RouteValues ??= new RouteValueDictionary();
        pagerOptions.RouteValues[key] = value;
        return this;
    }

    /// <summary>
    /// 设置 PagerOptions 的 Route 属性
    /// </summary>
    /// <param name="routeName"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetRoute(string routeName)
    {
        pagerOptions.Route = routeName;
        return this;
    }

    /// <summary>
    /// 设置 PagerOptions 的 FirstPageRoute 属性
    /// </summary>
    /// <param name="routeName"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetFirstPageRoute(string routeName)
    {
        pagerOptions.FirstPageRoute = routeName;
        return this;
    }

    /// <summary>
    /// 设置 PagerOptions 的 AutoHide 属性值为false
    /// </summary>
    /// <returns></returns>
    public PagerOptionsBuilder DisableAutoHide()
    {
        pagerOptions.AutoHide = false;
        return this;
    }

    /// <summary>
    /// 设置 PagerOptions 的 PageIndexOutOfRangeErrorMessage 属性
    /// </summary>
    /// <param name="msg"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetPageIndexOutOfRangeErrorMessage(string msg)
    {
        pagerOptions.PageIndexOutOfRangeErrorMessage = msg;
        return this;
    }

    /// <summary>
    /// 设置 PagerOptions 的 HorizontalAlign 属性
    /// </summary>
    /// <param name="alignment"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetHorizontalAlign(string alignment)
    {
        pagerOptions.HorizontalAlign = alignment;
        return this;
    }

    /// <summary>
    /// 设置 PagerOptions 的 InvalidPageIndexErrorMessage 属性
    /// </summary>
    /// <param name="msg"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetInvalidPageIndexErrorMessage(string msg)
    {
        pagerOptions.InvalidPageIndexErrorMessage = msg;
        return this;
    }

    /// <summary>
    /// 设置 PagerOptions 的 PageIndexParameterName 属性
    /// </summary>
    /// <param name="prmName"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetPageIndexParameterName(string prmName)
    {
        pagerOptions.PageIndexParameterName = prmName;
        return this;
    }

    /// <summary>
    /// 设置 PagerOptions 的 PageIndexBoxId 属性
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetPageIndexBoxId(string id)
    {
        pagerOptions.PageIndexBoxId = id;
        return this;
    }

    /// <summary>
    /// 设置 PagerOptions 的 MaximumPageIndexItems 属性
    /// </summary>
    /// <param name="items"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetMaximumPageIndexItems(int items)
    {
        pagerOptions.MaximumPageIndexItems = items;
        return this;
    }

    /// <summary>
    /// 设置 PagerOptions 的 GoToButtonId 属性
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetGoToButtonId(string id)
    {
        pagerOptions.GoToButtonId = id;
        return this;
    }

    /// <summary>
    /// 设置 PagerOptions 的 PageNumberFormatString 属性
    /// </summary>
    /// <param name="format"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetPageNumberFormatString(string format)
    {
        pagerOptions.PageNumberFormatString = format;
        return this;
    }

    /// <summary>
    /// 设置 PagerOptions 的 CurrentPageNumberFormatString 属性
    /// </summary>
    /// <param name="format"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetCurrentPageNumberFormatString(string format)
    {
        pagerOptions.CurrentPageNumberFormatString = format;
        return this;
    }

    /// <summary>
    /// 设置 PagerOptions 的 TagName 属性
    /// </summary>
    /// <param name="tagName"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetTagName(string tagName)
    {
        pagerOptions.TagName = tagName;
        return this;
    }

    /// <summary>
    /// 设置 PagerOptions 的 PagerItemTemplate 属性
    /// </summary>
    /// <param name="template"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetPagerItemTemplate(string template)
    {
        pagerOptions.PagerItemTemplate = template;
        return this;
    }

    /// <summary>
    /// 设置 PagerOptions 的 NumericPagerItemTemplate 属性
    /// </summary>
    /// <param name="template"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetNumericPagerItemTemplate(string template)
    {
        pagerOptions.NumericPagerItemTemplate = template;
        return this;
    }

    /// <summary>
    /// SetCurrentPagerItemTemplate
    /// </summary>
    /// <param name="template"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetCurrentPagerItemTemplate(string template)
    {
        pagerOptions.CurrentPagerItemTemplate = template;
        return this;
    }

    /// <summary>
    /// 设置 PagerOptions 的 NavigationPagerItemTemplate 属性
    /// </summary>
    /// <param name="template"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetNavigationPagerItemTemplate(string template)
    {
        pagerOptions.NavigationPagerItemTemplate = template;
        return this;
    }

    /// <summary>
    /// 设置 PagerOptions 的 MorePagerItemTemplate 属性
    /// </summary>
    /// <param name="template"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetMorePagerItemTemplate(string template)
    {
        pagerOptions.MorePagerItemTemplate = template;
        return this;
    }

    /// <summary>
    /// 设置 PagerOptions 的 DisabledPagerItemTemplate 属性
    /// </summary>
    /// <param name="template"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetDisabledPagerItemTemplate(string template)
    {
        pagerOptions.DisabledPagerItemTemplate = template;
        return this;
    }

    /// <summary>
    /// 是否总是显示第一页和最后一页两个数字页索引按钮
    /// </summary>
    /// <returns></returns>
    public PagerOptionsBuilder AlwaysShowFirstLastPageNumber()
    {
        pagerOptions.AlwaysShowFirstLastPageNumber = true;
        return this;
    }

    /// <summary>
    /// 设置 <see cref="PagerOptions.NumericPagerItemCount"/> 属性
    /// </summary>
    /// <param name="itemCount"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetNumericPagerItemCount(int itemCount)
    {
        pagerOptions.NumericPagerItemCount = itemCount;
        return this;
    }

    /// <summary>
    /// 设置 <see cref="PagerOptions.ShowPrevNext"/> 为 <value>false</value>
    /// </summary>
    /// <returns></returns>
    public PagerOptionsBuilder HidePrevNext()
    {
        pagerOptions.ShowPrevNext = false;
        return this;
    }

    /// <summary>
    /// 设置 <see cref="PagerOptions.PrevPageText"/> 属性
    /// </summary>
    /// <param name="text"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetPrevPageText(string text)
    {
        pagerOptions.PrevPageText = text;
        return this;
    }

    /// <summary>
    /// 设置 <see cref="PagerOptions.NextPageText"/> 属性
    /// </summary>
    /// <param name="text"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetNextPageText(string text)
    {
        pagerOptions.NextPageText = text;
        return this;
    }

    /// <summary>
    /// 设置 <see cref="PagerOptions.ShowNumericPagerItems"/> 属性
    /// </summary>
    /// <returns></returns>
    public PagerOptionsBuilder HideNumericPagerItems()
    {
        pagerOptions.ShowNumericPagerItems = false;
        return this;
    }

    /// <summary>
    /// 设置 <see cref="PagerOptions.ShowFirstLast"/> 为 <value>false</value>
    /// </summary>
    /// <returns></returns>
    public PagerOptionsBuilder HideFirstLast()
    {
        pagerOptions.ShowFirstLast = false;
        return this;
    }

    /// <summary>
    /// 设置 <see cref="PagerOptions.FirstPageText"/> 属性
    /// </summary>
    /// <param name="text"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetFirstPageText(string text)
    {
        pagerOptions.FirstPageText = text;
        return this;
    }

    /// <summary>
    /// 设置 <see cref="PagerOptions.LastPageText"/> 属性
    /// </summary>
    /// <param name="text"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetLastPageText(string text)
    {
        pagerOptions.LastPageText = text;
        return this;
    }

    /// <summary>
    /// 设置 <see cref="PagerOptions.ShowMorePagerItems"/> 属性
    /// </summary>
    /// <returns></returns>
    public PagerOptionsBuilder HideMorePagerItems()
    {
        pagerOptions.ShowMorePagerItems = false;
        return this;
    }

    /// <summary>
    /// 设置 <see cref="PagerOptions.MorePageText"/> 属性
    /// </summary>
    /// <param name="text"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetMorePageText(string text)
    {
        pagerOptions.MorePageText = text;
        return this;
    }

    /// <summary>
    /// 设置 <see cref="PagerOptions.Id"/> 属性
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetId(string id)
    {
        pagerOptions.Id = id;
        return this;
    }

    /// <summary>
    /// 设置 <see cref="PagerOptions.CssClass"/> 属性
    /// </summary>
    /// <param name="cssClass"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetCssClass(string cssClass)
    {
        pagerOptions.CssClass = cssClass;
        return this;
    }

    /// <summary>
    /// 设置 <see cref="PagerOptions.ShowDisabledPagerItems"/> 为 <value>false</value>
    /// </summary>
    /// <returns></returns>
    public PagerOptionsBuilder HideDisabledPagerItems()
    {
        pagerOptions.ShowDisabledPagerItems = false;
        return this;
    }

    /// <summary>
    /// 设置 <see cref="PagerOptions.MaximumPageNumber"/> 属性
    /// </summary>
    /// <param name="number"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetMaximumPageNumber(int number)
    {
        pagerOptions.MaximumPageNumber = number;
        return this;
    }

    /// <summary>
    /// 设置 <see cref="PagerOptions.NavigationPagerItemsPosition"/> 属性
    /// </summary>
    /// <param name="position"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetNavigationPagerItemsPosition(PagerItemsPosition position)
    {
        pagerOptions.NavigationPagerItemsPosition = position;
        return this;
    }

    /// <summary>
    /// 设置 PagerOptions 的 PagerItemCssClass 属性
    /// </summary>
    /// <param name="cssClass">要应用的css类名</param>
    /// <returns></returns>
    public PagerOptionsBuilder SetPagerItemCssClass(string cssClass)
    {
        pagerOptions.PagerItemCssClass = cssClass;
        return this;
    }

    /// <summary>
    /// 设置 PagerOptions 的 RouteValues 属性
    /// </summary>
    /// <param name="values"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetRouteValues(RouteValueDictionary values)
    {
        pagerOptions.RouteValues = values;
        return this;
    }

    /// <summary>
    /// 设置 PagerOptions 的 HtmlAttributes 属性
    /// </summary>
    /// <param name="attributes"></param>
    /// <returns></returns>
    public PagerOptionsBuilder SetHtmlAttributes(IDictionary<string, object> attributes)
    {
        pagerOptions.HtmlAttributes = attributes;
        return this;
    }
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

这是一个用于构建和配置分页器选项的Builder模式实现类。让我详细解释一下这个代码:

类的目的和设计模式

public class PagerOptionsBuilder(PagerOptions pagerOptions)

这个类采用了Builder设计模式,用于流式配置PagerOptions对象。通过主构造函数接收一个PagerOptions实例,然后提供一系列方法来设置该对象的各种属性。

核心特点

1. 链式调用支持

每个方法都返回this,支持链式调用:

builder.SetAction("Index")
       .SetController("Home")
       .SetCssClass("pagination")
       .SetPageSize(10);

2. 方法分类

路由相关配置:

  • SetAction() - 设置控制器动作
  • SetController() - 设置控制器名称
  • SetArea() - 设置区域名称
  • SetRoute() - 设置路由名称
  • AddRouteValue() - 添加路由参数

外观和样式配置:

  • SetCssClass() - 设置CSS类
  • SetHorizontalAlign() - 设置水平对齐
  • SetTagName() - 设置HTML标签名
  • AddHtmlAttribute() - 添加HTML属性

分页行为配置:

  • SetNumericPagerItemCount() - 设置数字页码显示数量
  • SetMaximumPageIndexItems() - 设置最大页码项数
  • DisableAutoHide() - 禁用自动隐藏
  • AlwaysShowFirstLastPageNumber() - 总是显示首末页

显示控制:

  • HidePrevNext() - 隐藏上一页/下一页
  • HideFirstLast() - 隐藏首页/末页
  • HideNumericPagerItems() - 隐藏数字页码
  • HideMorePagerItems() - 隐藏更多页码
  • HideDisabledPagerItems() - 隐藏禁用的分页项

文本自定义:

  • SetPrevPageText() - 设置"上一页"文本
  • SetNextPageText() - 设置"下一页"文本
  • SetFirstPageText() - 设置"首页"文本
  • SetLastPageText() - 设置"末页"文本

模板配置:

  • SetPagerItemTemplate() - 设置分页项模板
  • SetCurrentPagerItemTemplate() - 设置当前页模板
  • SetNavigationPagerItemTemplate() - 设置导航模板

使用示例

var options = new PagerOptions();
var builder = new PagerOptionsBuilder(options);

builder.SetController("Products")
       .SetAction("Index")
       .SetCssClass("my-pagination")
       .SetNumericPagerItemCount(5)
       .SetPrevPageText("‹ 上一页")
       .SetNextPageText("下一页 ›")
       .DisableAutoHide()
       .AddRouteValue("category", "electronics");

总结

这个类提供了一个流畅、类型安全的方式来配置复杂的分页器选项,避免了直接操作PagerOptions对象的复杂性,使代码更加清晰和易于维护。它是典型的Builder模式应用,特别适合需要配置大量可选参数的场景。

评论加载中...