2015-05-20 18 views
7

Ich versuche, einen benutzerdefinierten Tag Helfer in MVC 6 zu erstellen, kann aber nicht funktionieren.Wie erstelle ich benutzerdefinierte Tag-Helfer für den Rasierer?

Hier ist meine Demo-Tag-Helfer-Klasse im Web-App-Projekt definiert.

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"; 
     } 
    } 
} 

Dies ist, wie ich es verwende in meinen Ansichten:

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

ich viele Dinge ausprobiert. Das Attribut TargetElement wurde entfernt oder der Namespace wurde geändert. Nichts ändert sich ... Das Ergebnis ist immer noch gleich.

Durch die Art und Weise meine Microsoft.AspNet.Mvc.TagHelpers Version ist 6.0.0-Beta 4.

Vielleicht muss ich meinen Tag Helfer irgendwo registrieren? Ich habe mir MVC-Quellcodes angeschaut und sie haben nirgends auf ihre eigenen Tag-Helfer verwiesen. Also ich denke, dass es keine Registrierung benötigt.

Wo ist das Problem hier?

+0

Siehe http://docs.asp.net/projects/mvc/en/latest/views/tag-helpers/authoring.html zum Erstellen von benutzerdefinierten Tag-Helfern. – RickAndMSFT

Antwort

6

können Sie die TagHelper Verarbeitung für die benutzerdefinierten Tags ermöglichen durch Zugabe einer addTagHelper Richtlinie auf die _ViewImports.cshtml Datei im Verzeichnis Ansichten gefunden:

@addTagHelper "*, YourMvcAssembly" 

aktualisieren

@yilmaz benötigt auch ein hinzufügen Verweis auf Microsoft.AspNet.Tooling.Razor wie unten in den Kommentaren aufgeführt.

+0

Jetzt habe ich es geschafft zu arbeiten. Ich musste zwei Dinge hinzufügen und das war einer von ihnen. Und der andere war ein Verweis auf ** Microsoft.AspNet.Tooling.Razor ** Assembly. Vielleicht können Sie dieses auch zu Ihrer Antwort hinzufügen, um es für die zukünftigen Anwendungen vollständiger zu machen. – Yves

+0

@Yilmaz Schön, das habe ich auch zur Antwort hinzugefügt. Vielen Dank. :) – hutchonoid

2

Dies ist, was ich für einen benutzerdefinierten Tag Helfer derzeit habe und es funktioniert. Ich habe es geändert, um ein Demo-Element anzusteuern. Probieren Sie es aus:

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); 
     } 
    } 
} 
Verwandte Themen