2010-09-30 13 views
20

के लिए टैग रैपिंग को रोकें मैं विभिन्न एएसपी.NET सर्वर नियंत्रण लिख रहा हूं और टैग को हटाने की आवश्यकता है जो डिफ़ॉल्ट रूप से मेरे नियंत्रण को लपेटती है। मुझे पता है कि आप टैग को एक अलग टैग में बदल सकते हैं (जैसा कि इस प्रश्न में, How Do I Change the render behavior of my custom control from being a span) लेकिन आप इसे कैसे रोक सकते हैं?ASP.NET सर्वर नियंत्रण

मैं वेबकंट्रोल से विरासत में हूं (कंपोजिट कंट्रोल से भी प्राप्त हो सकता है)।

मैं आम तौर पर मिलती है:

<span>Control output</span> 

मैं की जरूरत है:

Control output 

मैं RenderContents (HtmlTextWriter उत्पादन) और CreateChildControls() पद्धतियों (विभिन्न नियंत्रण के पार) अधिभावी कर रहा हूँ। मेरी तत्काल आवश्यकता RenderContents (HtmlTextWriter आउटपुट) विधि का उपयोग कर समस्या को हल करना है।

उत्तर

37

इसके बारे में क्या?

public override void RenderBeginTag(HtmlTextWriter writer) 
    { 
     writer.Write(""); 
    } 

    public override void RenderEndTag(HtmlTextWriter writer) 
    { 
     writer.Write(""); 
    } 
+0

अभी तक बहुत स्पष्ट है! आपकी सहायता के लिए धन्यवाद. –

+2

शानदार समाधान :) मैंने वास्तव में दोनों के लिए एक खाली विधि का उपयोग किया और बस एक टिप्पणी पंक्ति डाली कि वे क्यों हैं। सुनिश्चित नहीं है कि यह आपके से अलग है लेकिन इसे एक खाली स्ट्रिंग लिखने से अनावश्यक लगता है। – William

+0

इससे मुझे बहुत मदद मिली - मुझे आपका पूरा समाधान मिलने से पहले बहुत सारी 'अच्छी टिप्स' पढ़नी पड़ी।यदि संभव हो तो आपको एक से अधिक अपवोट देंगे * जी * –

3

यह करने के लिए एक और अधिक सुरुचिपूर्ण तरीका है Webcontrol की contrustor का उपयोग करके

public MyWebControl() : base(HtmlTextWriterTag.Div){} 

और कस्टम जोड़ने के लिए RenderBeginTag विधि के गुणों को ओवरराइड या (डिफ़ॉल्ट इस HtmlTextWriterTag.Span साथ कहा जाता है के आधार पर) अन्य सामान:

public override void RenderBeginTag(HtmlTextWriter writer) 
    { 
     writer.AddAttribute("class", "SomeClassName"); 
     base.RenderBeginTag(writer); 
    } 
+0

इससे समस्या हल नहीं होती है। हालांकि यह आपको एक अलग तत्व में बदलाव को बदलने की अनुमति देगा, जैसे कि आपके उदाहरण में दिया गया div, यह अनुरोध के अनुसार बाहरी तत्व को पूरी तरह से हटाने की अनुमति नहीं देता है। आप 'बेस() 'पर कॉल करने के लिए' HtmlTextWriterTag. अज्ञात 'या कॉल के लिए एक खाली स्ट्रिंग में गुजर सकते हैं, लेकिन जब तत्व के नाम को हटा दिया जाता है, तो तत्व के लिए कोण ब्रैकेट अभी भी रखे जाते हैं, इसलिए आप अमान्य के साथ समाप्त होते हैं मार्कअप: '<>'। – Elezar

1

मुझे एक ही समस्या का सामना करना पड़ रहा था। मेरे मामले में मैं तरीकों अधिभावी किया गया था:

protected override void Render(HtmlTextWriter output) 
     { /* Control rendering, no <span> tag */ } 

आशा इस मदद करता है:

protected override void OnPreRender(EventArgs e) 
    { /* Insert the control's stylesheet on the page */ } 

और

protected override void RenderContents(HtmlTextWriter output) 
     { /* Control rendering here, <span> tag will show up */ } 

इसे रोकने के लिए, मैं बस निम्नलिखित के साथ RenderContents ओवरराइड बदल दिया।

+1

रेंडरकंट्स के बजाय रेंडर का उपयोग करना मेरे लिए काम करता है। इस तरह RenderBeginTag/RenderEndTag को वास्तव में कभी नहीं कहा जाता है – Trent

0

मुझे नहीं लगता कि स्वीकृत उत्तर पूरी तरह से आवश्यक है। मैं गलत हो सकता है, लेकिन प्रणाली को बुलाती है सभी तीन प्रस्तुत करना:

  • RenderBeginTag
  • RenderContents
  • RenderEndTag

तो आप बस प्रस्तुत करना ओवरराइड और मैन्युअल रूप से फोन RenderContents में सक्षम होना चाहिए:

protected override void Render(HtmlTextWriter writer) 
{ 
    this.RenderContents(writer); 
} 

कोई भी? शायद मुझे कुछ याद आ रही है। मुझे पता है कि यह धागा पुराना है लेकिन मैं हाल ही में इसमें भाग गया था कि उपर्युक्त मेरा समाधान था।

संबंधित मुद्दे