2015-05-20 2 views
7

मैं एमवीसी 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 है।

शायद मुझे कहीं भी अपना टैग सहायक पंजीकृत करना होगा? मैंने एमवीसी स्रोत कोड में देखा और उन्होंने कहीं भी अपने टैग सहायकों का संदर्भ नहीं दिया है। तो मुझे लगता है कि पंजीकरण की आवश्यकता नहीं है।

यहां समस्या कहां है? यह भी एक जोड़ने के लिए की जरूरत

@addTagHelper "*, YourMvcAssembly" 

अद्यतन

@yilmaz:

+0

कैसे कस्टम टैग सहायकों बनाने के लिए पर http://docs.asp.net/projects/mvc/en/latest/views/tag-helpers/authoring.html देखें। – RickAndMSFT

उत्तर

6

आप _ViewImports.cshtml फ़ाइल दृश्य निर्देशिका में पाया करने के लिए एक addTagHelper निर्देश जोड़कर कस्टम टैग के लिए TagHelper प्रसंस्करण सक्षम कर सकते हैं टिप्पणियों में नीचे दिए गए अनुसार Microsoft.AspNet.Tooling.Razor का संदर्भ।

+0

अब मैं इसे काम करने में कामयाब रहा। मुझे दो चीजें जोड़ने की ज़रूरत थी और यह उनमें से एक था। और दूसरा एक माइक्रोसॉफ्ट.एस्पनेट.ूलिंग.रज़र ** असेंबली का संदर्भ था। तो हो सकता है कि आप भविष्य में उपयोग के लिए इसे और अधिक पूरा करने के लिए इसे अपने उत्तर में भी जोड़ सकें। – Yves

+0

@ यिलमाज़ अच्छा है, मैंने इसे उत्तर में भी जोड़ा है। धन्यवाद। :) – 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); 
     } 
    } 
} 
संबंधित मुद्दे