【问题标题】:"TagHelper" does not create elements in created html tag“TagHelper”不会在创建的 html 标记中创建元素
【发布时间】:2019-09-20 23:41:17
【问题描述】:

我正在尝试通过必须由自定义 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); } }
    }
}

我将它包装在另一个模型视图数据中

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

然后将其插入到Controller Class中以检索数据并建立逻辑

    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>

查看下面的导入代码

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

但是当程序运行时,导航面板没有出现在页面上 Here navigation panel is not appearing

当我打开页面源代码时,标签助手似乎不起作用,代码不会添加创建的标签。

source page

我不明白为什么我的标签助手根本不起作用。你知道我在哪里犯错了吗?

编辑:我正在使用 CORE 3.0 功能。会不会是这个问题造成的?

【问题讨论】:

  • 我尝试重现您的场景,它对我有用,但我使用的是 .NET Core 2.2。您使用的是 Visual Studio 2019 吗?

标签: asp.net-mvc attributes tag-helpers .net-core-3.0


【解决方案1】:

@addTagHelper *, SportWeb 这是问题的答案写在 ViewImport 中

【讨论】:

    【解决方案2】:

    我尝试重现您的场景,它奏效了。我尝试使用 NET Core 2.2 和 Visual Studio 2017 15.9.11 以及 .NET Core 3.0 Preview 5 和 Visual Studio 2019 16.0.3。

    问题很可能出在您这边。尝试排除故障。首先检查标签助手是否被执行。在PageLinkTagHelperProcess() 方法中放置一个断点。查看它是否在运行应用程序时被击中。

    仔细检查您是否正确添加了标签助手。正确添加的标签助手将具有 Visual Studio IntelliSense,如下所示:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-21
      • 1970-01-01
      • 1970-01-01
      • 2019-04-03
      • 1970-01-01
      相关资源
      最近更新 更多