c# - 带分页的模型绑定
问题描述
我有一个PagingInfo
类用于将信息传递给我的控制器以实现分页功能:
public int TotalItems { get; set; }
public int ItemsPerPage { get; set; }
public int CurrentPage { get; set; }
public int TotalPages => (int)Math.Ceiling((decimal)TotalItems / ItemsPerPage);
分页按钮通过以下方式呈现在我的视图中:
<div page-model="Model.PagingInfo" page-action="SearchResult" page-classes-enabled="true" page-class="btn" page-class-selected="btn-primary" class="btn-group pull-right m-1"></div>
因为这包含了一个自定义标签助手:
[HtmlTargetElement("div", Attributes = "page-model")]
public class PageLinkTagHelper : TagHelper
{
private IUrlHelperFactory urlHelperFactory;
public PageLinkTagHelper(IUrlHelperFactory helperFactory)
{
urlHelperFactory = helperFactory;
}
[ViewContext]
[HtmlAttributeNotBound]
public ViewContext ViewContext { get; set; }
public PagingInfo PageModel { get; set; }
public string PageAction { get; set; }
public bool PageClassesEnabled { get; set; } = false;
public string PageClass { get; set; }
public string PageClassNormal { get; set; }
public string PageClassSelected { get; set; }
public override void Process(TagHelperContext context,
TagHelperOutput output)
{
IUrlHelper urlHelper = urlHelperFactory.GetUrlHelper(ViewContext);
TagBuilder result = new TagBuilder("div");
for (int i = 1; i <= PageModel.TotalPages; i++)
{
TagBuilder tag = new TagBuilder("a");
tag.Attributes["href"] = urlHelper.Action(PageAction,
new { listPage = i });
if (PageClassesEnabled)
{
tag.AddCssClass(PageClass);
tag.AddCssClass(i == PageModel.CurrentPage
? PageClassSelected : PageClassNormal);
}
tag.InnerHtml.Append(i.ToString());
result.InnerHtml.AppendHtml(tag);
}
output.Content.AppendHtml(result.InnerHtml);
}
}
同样在我的视图中,我绑定了过滤显示的分页项目所需的特定模型元素,例如
<input hidden asp-for="@Model.SearchTerms.FormID" class="form-control" />
这一切都包含在<form>
标签中。但是,当我单击分页按钮时,不会发生模型绑定。
如果我改为将<div>
标签更改为<button>
标签,则可以进行模型绑定,如下所示:
<button page-model="Model.PagingInfo" page-action="SearchResult" page-classes-enabled="true" page-class="btn" page-class-selected="btn-primary" class="btn-group pull-right m-1"></button>
但是,这会弄乱分页按钮显示,使其无法使用(<a>
标签也是如此)。有没有办法将我的模型绑定到一个<div>
元素中?
解决方案
推荐阅读
- docker - 是否可以在 Azure Web 应用服务中创建 ftpserver
- c# - 如何在 Crystal Reports 中将列数据显示为行标题
- java - 代码是否存在导致异常的问题?
- hive - 拒绝访问 - EMR Presto - 基于文件的授权
- excel - 将数据从计划中提取到指定的部门工作表
- sql - 加入多列时,匹配列的顺序是否重要?
- angular - Angularfire 项目的 Google Cloud Build 超时
- drupal - 向注册用户显示他们已经提交了哪些网络表单
- pandas - 熊猫解析周数
- mysql - 如何在 mysql 中找到 LEAST() 使用的列?