Как создать пользовательские помощники тегов для бритвы?

Я пытаюсь создать собственный вспомогательный тег в MVC 6, но не могу заставить его работать.

Вот мой вспомогательный класс демонстрационного тега, определенный в проекте веб-приложения.

namespace Microsoft.AspNet.Mvc.TagHelpers
{
    [TargetElement("demo", Attributes = CustomAttributeName)]
    public class DemoTagHelper : TagHelper
    {
        private const string CustomAttributeName = "asp-custom";

        [HtmlAttributeName(CustomAttributeName)]
        public string Custom { get; set; }

        public string Value { get; set; }


        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            output.TagName = "div";
            output.Attributes["foo"] = "bar";
        }
    }
}

Вот как я использую это в своих представлениях:

<demo asp-custom="hello world!">
    Please work this time :)
</demo>

Я пробовал много вещей. Удален атрибут TargetElement или изменено пространство имен. Ничего не меняется... Результат тот же.

Кстати, моя версия Microsoft.AspNet.Mvc.TagHelpers6.0.0-beta4.

Может быть, мне нужно где-то зарегистрировать свой помощник по тегам? Я просмотрел исходные коды MVC, и они нигде не ссылались на свои собственные вспомогательные теги. Так что я думаю, что регистрация не нужна.

В чем здесь проблема?


person Yves    schedule 20.05.2015    source источник
comment
См. docs.asp.net/projects/mvc. /en/latest/views/tag-helpers/ о том, как создавать собственные помощники по тегам.   -  person RickAndMSFT    schedule 16.09.2015


Ответы (2)


Вы можете включить обработку TagHelper для пользовательских тегов, добавив директиву addTagHelper в файл _ViewImports.cshtml, который находится в каталоге Views:

@addTagHelper "*, YourMvcAssembly"

Обновить

@yilmaz также нужно было добавить ссылку на Microsoft.AspNet.Tooling.Razor, как описано ниже в комментариях.

person hutchonoid    schedule 20.05.2015
comment
Теперь мне удалось заставить его работать. Мне нужно было добавить две вещи, и это была одна из них. А другой был ссылкой на сборку Microsoft.AspNet.Tooling.Razor. Так что, возможно, вы можете добавить это тоже к своему ответу, чтобы сделать его более полным для использования в будущем. - person Yves; 20.05.2015
comment
@Yilmaz Хорошо, я тоже добавил это к ответу. Спасибо. :) - person hutchonoid; 20.05.2015

Это то, что у меня есть для пользовательского помощника тегов в настоящее время, и это работает. Я изменил его, чтобы нацелить на демонстрационный элемент. Попробуйте:

namespace TestingTagHelpers.TagHelpers
{
    using Microsoft.AspNet.Razor.Runtime.TagHelpers;
    using System;

    /// <summary>
    /// <see cref="ITagHelper"/> implementation targeting &lt;demo&gt; elements.
    /// </summary>
    //[TargetElement("demo")]
    public class DemoTagHelper : TagHelper
    {
        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            var childContent = context.GetChildContentAsync().Result;
            string demoContent = childContent.GetContent();
            string demo = context.AllAttributes["asp-custom"].ToString();

            output.TagName = "div";
            output.Attributes.Clear();
            output.Attributes["data-custom"] = demo;
            output.Content.SetContent(demoContent);
        }
    }
}
person Konstantin Dinev    schedule 20.05.2015