2015-05-20 35 views
7

MVC 6'da bir özel etiket yardımcısı oluşturmaya çalışıyorum ancak çalışmasını sağlayamıyorum.Jilet için özel etiket yardımcıları nasıl oluşturulur?

Web uygulama projesinde tanımlanmış demo etiket yardımcım sınıfım.

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

Bu benim görünümlerinde nasıl kullandığımız: Ben birçok şeyi denedik

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

. TargetElement özniteliği kaldırıldı veya ad alanı değiştirildi. Hiçbir şey değişmez ... Sonuç hala aynı. Bu arada benim Microsoft.AspNet.Mvc.TagHelpers versiyonu ile

6.0.0-beta4 olduğunu.

Etiket yardımcımı bir yere kaydettirebilir miyim? MVC kaynak kodlarına baktım ve kendi etiket yardımcılarını herhangi bir yere göndermediler. Yani bence kayıt gerekli değil.

Burada sorun nerede? ayrıca gerektiğinde bir ekleme

@addTagHelper "*, YourMvcAssembly" 

Güncelleme

@yilmaz:

+0

özel etiket yardımcıları oluşturmak için nasıl http://docs.asp.net/projects/mvc/en/latest/views/tag-helpers/authoring.html bakın. – RickAndMSFT

cevap

6

Görünümler dizinde bulunan _ViewImports.cshtml dosyaya bir addTagHelper direktifini ekleyerek özel etiketler için TagHelper işleme etkinleştirebilirsiniz Açıklamalarda aşağıda detayları verilen Microsoft.AspNet.Tooling.Razor referansı.

+0

Şimdi çalışmayı başardım. İki şey eklemem gerekiyordu ve bu onlardan biriydi. Ve diğeri ** Microsoft.AspNet.Tooling.Razor ** derlemesi için bir referans oldu. Bu yüzden, gelecekteki kullanımlar için daha eksiksiz hale getirmek için bunu cevabınıza da ekleyebilirsiniz. – Yves

+0

@Yilmaz Güzel biri, bunu da cevaba ekledim. Teşekkürler. :) – hutchonoid

2

Şu anda özel bir etiket yardımcısı için sahip olduğum şey budur ve çalışır. Bir demo elemanını hedeflemek için değiştirdim. Deneyin:

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); 
     } 
    } 
} 
İlgili konular