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模式应用,特别适合需要配置大量可选参数的场景。
AI 正在分析代码…
评论加载中...