2015-09-21 9 views
6

क्या टैगहेल्पर को एक और टैगहेल्पर प्रस्तुत करने का कोई तरीका है?टैगहेल्पर को किसी अन्य टैगहेल्पर से कॉल करना?

उदाहरण टैगहेल्पर;

public class OuterTagHelper : TagHelper 
{ 
    public override void Process(TagHelperContext context, TagHelperOutput output) 
    { 
     output.TagName = ""; 
     output.Content.SetContent("Hello <inner></inner>"); 
    } 
} 

public class InnerTagHelper : TagHelper 
{ 
    public override void Process(TagHelperContext context, TagHelperOutput output) 
    { 
     output.TagName = ""; 
     output.Content.SetContent("World!"); 
    } 
} 

उदाहरण देखें;

<outer></outer> 

अपेक्षित परिणाम;

Hello World! 

मुझे पता है कि मुझे शायद इसके बजाय एक व्यू कॉम्पोनेंट का उपयोग करना चाहिए, लेकिन क्या ऊपर दिए गए अपेक्षित व्यवहार को हासिल करना संभव है?

+1

आप कर सकते थे अपना रेजर ध्यान में रखते हुए में [इस सवाल] के रूप में काम करेंगे घोंसला उन्हें (http://stackoverflow.com/questions/32692857/nesting-taghelpers-in-asp-net-5-mvc-6), लेकिन मुझे नहीं लगता कि आप प्रक्रिया विधि के भीतर से एक और टेम्पलेट कॉल कर सकते हैं। (हो सकता है कि आप उन्हें जोड़कर और मैन्युअल रूप से प्रक्रिया को कॉल करके कर सकें, लेकिन यह एक अच्छा विचार नहीं है) –

उत्तर

1

@Daniel J.G. सही है, यह अनुशंसित नहीं है। तकनीकी रूप से आप इसे कर सकते हैं यदि आपने अपनी सामग्री को अपने अत्यधिक अनुकूलित रेजर पार्सर के माध्यम से वापस चलाया और फिर सामग्री को निष्पादित किया जैसे कि यह एक पृष्ठ था - लेकिन यह निश्चित रूप से आपकी समस्या का गलत दृष्टिकोण है।

2

आप उपयोग करना मौजूदा टैग सहायक प्रकार की कार्यक्षमता के कुछ तो आप IHtmlGenerator से पहुंच सकते हैं की जरूरत है। यह कस्टम टैग सहायक कार्यक्षमता का उपयोग करने की मदद नहीं करेगा, लेकिन यदि आप सिर्फ लेबल की तरह मौजूदा सामान की कार्यक्षमता की जरूरत है, इनपुट तो यह

[HtmlTargetElement("input", Attributes = nameof(Wrap) + ", asp-for")] 
[HtmlTargetElement("select", Attributes = nameof(Wrap) + ", asp-for")] 
public class FormGroupWrapperTagHelper : TagHelper 
{ 
    public FormGroupWrapperTagHelper(IHtmlGenerator generator) 
    { 
     Generator = generator; 
    } 

    [HtmlAttributeNotBound] 
    [ViewContext] 
    public ViewContext ViewContext { get; set; } 

    protected IHtmlGenerator Generator { get; } 

    public ModelExpression AspFor { get; set; } 
    public override void Process(TagHelperContext context, TagHelperOutput output) 
    { 
     var generateValidationMessage = Generator.GenerateValidationMessage(ViewContext, 
                    AspFor.Name, 
                    message: null, 
                    tag: null, 
                    htmlAttributes: null); 
..... 
} 
संबंधित मुद्दे