2009-07-05 6 views
7

कस्टम नियंत्रण लिखते समय इसे हमेशा HTML स्पैन तत्व के रूप में प्रस्तुत किया जाता है। उदाहरण के लिए मैं इसे div कैसे बदल सकता हूं?मैं अपने कस्टम नियंत्रण का रेंडर व्यवहार कैसे बदल सकता हूं

public class MyCustomControl : WebControl { 
    public MyCustomControl() : base(HtmlTextWriterTag.Div) {} 
} 

है, आधार वर्ग निर्माता है कि टैग का उपयोग करने स्वीकार करता है का उपयोग करें:

उत्तर

7

इस प्रकार Webcontrol से अपने नियंत्रण प्राप्त।

0

मेरे पास आमतौर पर मेरा स्वयं का आधार वर्ग होता है जो मेरे सभी समग्र नियंत्रण से प्राप्त होता है। इसमें से एक गुण जो मैं जोड़ता हूं वह एक कंटेनर एलिमेंट है। सार्वजनिक रूप से उजागर किया गया, डेवलपर चुन सकता है कि वे कभी भी बाहरी तत्व चाहते हैं। आंतरिक रूप से यह टैगकी संपत्ति सेट करता है जो आधार नियंत्रण पर इस प्रतिपादन को नियंत्रित करता है। आपके नियंत्रण/बेस क्लास के लिए निम्नलिखित सभी।

आपको केवल HTMLContainerElement सेट करने की आवश्यकता है जिसमें HtmlTextWriterTag गणना में सभी आइटम्स की इंटेलि-सहायता होगी।

/// <summary> 
/// Local variable for storing what the container element for the rendered control will be. 
/// </summary> 
private HtmlTextWriterTag hosTagKey = HtmlTextWriterTag.Span; 

/// <summary> 
/// HTMLContanerElement is the tag key used to set the controls outer html control which appears in the markup. 
/// The default is a span, but you can change this to be any HTML control you choose. 
/// </summary> 
public HtmlTextWriterTag HTMLContainerElement 
{ 
    get { return this.hosTagKey; } 
    set { this.hosTagKey = value; } 
} 

/// <summary> 
/// Makes it so this control is a "div" element instead of the 
/// standard "span" element. 
/// </summary> 
protected override HtmlTextWriterTag TagKey 
{ 
    get { return this.hosTagKey; } 
} 
3

यदि आप कंपोजिट कंट्रोल से प्राप्त होते हैं तो कोई ऐसा निर्माता नहीं होता है जो टैग प्रकार लेता है। आप टैगकी को ओवरराइड कर सकते हैं (मैंने इसे आजमाया नहीं है), लेकिन अधिक लचीला विकल्प RenderBeginTag विधि को ओवरराइड करना है और इसे वही करना है जो आप चाहते हैं। बेस क्लास एक "अवधि" उद्घाटन तत्व प्रस्तुत करता है, लेकिन आपको बेस क्लास विधि को कॉल करने की आवश्यकता नहीं है। यदि आप कुछ भी नहीं चाहते हैं तो आपको कुछ भी कॉल करने की ज़रूरत नहीं है (इस मामले में रेंडरएंडटैग को ओवरराइड करें और वहां कुछ भी कॉल न करें)। उदाहरण के लिए,

public override void RenderBeginTag(HtmlTextWriter writer) 
    { 
     writer.AddAttribute(HtmlTextWriterAttribute.Class, "reportViewer"); 
     writer.AddAttribute(HtmlTextWriterAttribute.Id, "QueryViewerWrapper"); 
     writer.RenderBeginTag(HtmlTextWriterTag.Div); 
    } 

इस कोड का उत्पादन

<div class="reportViewer" id="QueryViewerWrapper"> 

जो वास्तव में क्या मैं मेरा यह विशेष रूप से समग्र नियंत्रण के लिए की जरूरत है, एक वर्ग के साथ एक div एक ReportViewer नियंत्रण रैप करने के लिए। मैं सिर्फ आउटपुट को स्थानांतरित करने के लिए आईडी को शामिल करता हूं।

+0

+1 टैग ओवररेड करें और यह अच्छी तरह से काम करता है – Maslow

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

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