Добавление пользовательских TagHelpers в ASP.NET Core 2.1

Я внимательно следил за документацией ASP.NET Core и потратил значительное количество времени на отслеживание переполнения стека, пытаясь безуспешно реализовать простой пользовательский TagHelper.

Может ли кто-нибудь посоветовать какие-либо ошибки или известные ошибки?

Свойства приложения:

AssemblyName: AmpWeb
Target Framework .NET Core 2.1

NuGet-пакеты

Microsoft.AspNetCore.All 2.1.2

Окружающая среда

OS: Windows 7 (x64)
SDK: Microsoft .NET Core SDK 2.1.302 (x64)
IDE: Visual Studio 2017 Professional 15.7.4

TagHelpers/EmailTagHelper.cs

using Microsoft.AspNetCore.Razor.TagHelpers;

namespace AmpWeb.TagHelpers
{
    [HtmlTargetElement(Attributes = "email")]
    public class EmailTagHelper : TagHelper
    {
        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            output.TagName = "a";    // Replaces <email> with <a> tag
        }
    }
}

Представления/_ViewImports.cshtml

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, AmpWeb

Индекс.cshtml

<h1>Hello World</h1>
<email>WHY</email>

Выход

<h1>Hello World</h1>
<email>WHY</email>

person Ben Dorman    schedule 11.07.2018    source источник


Ответы (1)


Это тонкий вопрос, но важный. Проблема в этой строке кода [HtmlTargetElement(Attributes = "email")]

Если вы удалите его, он должен работать, используя вашу разметку <email>WHY</email>. Вы также можете заменить его на [HtmlTargetElement("email")], но на самом деле в этом случае он даже не нужен, потому что фреймворк может вывести эту информацию из имени класса EmailTagHelper.

Включая [HtmlTargetElement(Attributes = "email")], вы говорите, что хотите, чтобы помощник тега вызывался через атрибут любого тега. Таким образом, вызов будет чем-то вроде <div email></div> или <span email></span>, например.

person RonC    schedule 11.07.2018