2015-05-20 4 views
7

Я пытаюсь создать специальный помощник тега в 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.TagHelpers версия 6.0.0-beta4.

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

Где находится проблема?

+0

См http://docs.asp.net/projects/mvc/en/latest/views/tag-helpers/authoring.html о том, как создавать собственные хелперы тегов. – RickAndMSFT

ответ

6

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

@addTagHelper "*, YourMvcAssembly" 

Update

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

+0

Теперь мне удалось заставить его работать. Мне нужно было добавить две вещи, и это был один из них. А другая была ссылкой на ** сборку Microsoft.AspNet.Tooling.Razor **. Поэтому, возможно, вы также можете добавить этот ответ в свой ответ, чтобы сделать его более полным для будущего использования. – Yves

+0

@Yilmaz Ницца, я добавил это к ответу тоже. Благодарю. :) – hutchonoid

2

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

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); 
     } 
    } 
} 
Смежные вопросы