«TagHelper» не создает элементы в созданном HTML-теге - PullRequest
1 голос
/ 02 мая 2019

Я пытаюсь разделить перечисленные элементы на страницы по специальным тегам, которые должны быть установлены пользовательским TagHelper

У меня есть класс для хранения данных для страницы и элементов, которые будут обработаны

    namespace SportWeb.Models.ViewModels
{
    public class PagingInfo
    {
        public int TotalItems { get; set; }
        public int ItemsPerPage { get; set; }
        public int CurrentPage { get; set; }
        public int TotalPages { get { return (int)Math.Ceiling((decimal)TotalItems / ItemsPerPage); } }
    }
}

Я обертываю его внутри другой модели viewdata

namespace SportWeb.Models.ViewModels
{
    public class ProductListViewModel
    {
        public IEnumerable<Product> Products { get; set; }
        public PagingInfo PagingInfos { get; set; }
    }
}

Затем вставьте его в класс контроллера для извлечения данных и установления логики

    public class ProductController : Controller
    {
        private IProductRepository _iProductRepository;
        int PageSize = 4;
        public ProductController(IProductRepository iProductRepository)
        {
            _iProductRepository = iProductRepository;
        }
        public IActionResult List(int itemPage = 1) => View(new ProductListViewModel 
                { Products = _iProductRepository
                   .List.OrderBy(p => p.ProductID)
                   .Skip((itemPage - 1) * PageSize)
                   .Take(PageSize),

                   PagingInfos = new PagingInfo { 
                     CurrentPage = itemPage, 
                     ItemsPerPage = PageSize, 
                     TotalItems= _iProductRepository.List.Count()} });

    }
}

И создание моего класса TagHelper

namespace SportWeb.InfraSturcture
{
    [HtmlTargetElement("div", Attributes = "page-model")]
    public class PageLinkTagHelper :TagHelper
    {
        private IUrlHelperFactory _iUrlHelperFactory;
        public PageLinkTagHelper(IUrlHelperFactory iUrlHelperFactory)
        {
            _iUrlHelperFactory = iUrlHelperFactory;
        }
        [ViewContext]
        [HtmlAttributeNotBound]
        public ViewContext ViewContext { get; set; }
        public PagingInfo PageModel { get; set; }
        public string PageAction { get; set; }

        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            IUrlHelper urlHelper = _iUrlHelperFactory.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 { itempPage = i });
                tag.InnerHtml.Append(i.ToString());
                result.InnerHtml.AppendHtml(tag);
            }
            output.Content.AppendHtml(result.InnerHtml);
        }
    }
}

а вот просмотр кодов страниц

    ViewData["Title"] = "List";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
@model ProductListViewModel
@addTagHelper SportWeb.InfraStructure.*,SportStore

<h1>List</h1>

@foreach (var p in Model.Products)
{
    <div>
        <h3>@p.Name</h3>
        @p.Description
        <h4>@p.Price.ToString("c")</h4>
    </div>
}
<div page-model="@Model.PagingInfos" page-action="List"></div>

ViewImport коды ниже

@using SportWeb.Models
@using SportWeb.Models.ViewModels
@using SportWeb.Entity
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper SportWeb.InfraStructure.*, SportWeb

Но при запуске программы панель навигации не появляется на странице Здесь не отображается панель навигации

И когда я открываю исходный код страницы, кажется, что Tag helper не работает, созданные теги не добавляются кодами.

исходная страница

Я не понимаю, почему мой помощник по тегам не работает вообще. У вас есть идеи о том, где я делаю ошибку?

Редактировать: я работаю с функциями CORE 3.0. Может ли это быть причиной этой проблемы?

1 Ответ

0 голосов
/ 11 мая 2019

Я попытался воспроизвести ваш сценарий, и он сработал . Я пробовал с NET Core 2.2 и Visual Studio 2017 15.9.11 и с .NET Core 3.0 Preview 5 с Visual Studio 2019 16.0.3.

Скорее всего, проблема на вашей стороне. Попробуйте устранить неполадки. Начните с проверки, выполняется ли вспомогательный тег вообще. Поместите точку останова в методе Process() в вашем PageLinkTagHelper. Посмотрите, ударил ли он по ходу приложения.

Дважды проверьте, правильно ли вы добавляете помощник по тегам. Правильно добавленный помощник по тегам будет иметь Visual Studio IntelliSense, например:

enter image description here

...