У меня есть класс 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>
?