如何在 asp.net core 3.0 中使用 TagHelpers?

How to use TagHelpers in asp.net core 3.0?

我正在尝试让自定义标签助手在 asp-net core 3.0 中工作。

using System.Threading.Tasks;
using Microsoft.AspNetCore.Razor.TagHelpers;

namespace MyProject.TagHelpers
{
    [HtmlTargetElement("p", Attributes = "markdown")]
    [HtmlTargetElement("markdown")]
    [OutputElementHint("p")]
    public class MarkdownTagHelper : TagHelper
    {
        public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
        {
            output.Content.SetHtmlContent("<p>lkajsdlkjasdlkjasd</p>");
        }
    }
}

_ViewImports.cshtml:

@using MyProject
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, MyProject

我正在尝试在 TermsConditions.cshtml 文件中引用 <markdown></markdown>。 (完整文件:)

<div>
    <markdown></markdown>
</div>

但是,在调用该视图时,markdown 标记仍然不会被替换。

我发现了很多问题、博客、...,但到目前为止没有任何效果。我检查了以下常见错误。

问题:

我需要做什么才能让 TagHelpers 工作?

看起来你没有正确应用它..

改变

[HtmlTargetElement("p", Attributes = "markdown")]
[HtmlTargetElement("markdown")]
[OutputElementHint("p")]

[HtmlTargetElement("markdown")]

在您的原始代码中,您需要执行类似 <p markdown="some text"></p>

的操作

根据现有信息,一切看起来都不错。所以我怀疑这实际上不是您的程序集名称;

@addTagHelper *, MyProject

也许我会节省一些人的时间。在我的例子中,当前项目中缺少 AssemblyName,因此没有应用标签助手。

_ViewImports.cshtml 文件中应该使用这个 AssemblyName 如:

@using AssemblyName
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, AssemblyName

并且不要忘记添加这些程序集:

Microsoft.AspNetCore.Mvc.Razor
Microsoft.AspNetCore.Mvc.TagHelpers
Microsoft.AspNetCore.Razor.Runtime