2012-11-21 12 views
6

मैं कोड से पीछे दिए गए किसी वेब पेज पर कुछ सामग्री जोड़ रहा हूं। मैं कुछ पाठ के बाद एक ब्रेक जोड़ना चाहते हैं, मैं इस तरह से है कि ऐसा करने के लिए प्रयास करें:HtmlGenericControl ("br") दो बार प्रतिपादन

pDoc.Controls.Add(New Label With {.Text = "whatever"}) 
pDoc.Controls.Add(New HtmlGenericControl("br")) 

, जहां pDoc Panel है जिसमें मैं सामग्री जोड़ने हूँ। लेकिन यह अंतिम HTML में दो br टैग जोड़ता है।

मैं इस व्यवहार को इस तरह से बचने कर दिया है:

pDoc.Controls.Add(New Label With {.Text = "whatever" & "<br />"}) 

वैसे भी, मैं बहुत उत्सुक हूँ और मुझे पता है क्यों

pDoc.Controls.Add(New HtmlGenericControl("br")) 

कि जिस तरह से काम कर रहा है चाहता हूँ। मुझे यह भी लगता है कि मेरा दृष्टिकोण बहुत फैंसी नहीं है।

सादर,

+1

आप यकीन है कि यह '

' 'नहीं

' प्रतिपादन है कर रहे हैं? – tpeczek

+0

हाँ, वह सही है 0,

उत्तर

5

कुछ परीक्षण यह कारण की तरह दिखता है उसके बाद HtmlGenericControlस्वयं समापन का समर्थन नहीं करता है।

<br runat="server"></br> 

HTML में कोई </br> टैग नहीं है, इसलिए ब्राउज़र यह पता चलता है के रूप में वहाँ दो <br /> टैग हैं: के रूप में सर्वर साइड पर HtmlGenericControl("br") व्यवहार किया जाता है। इस से बाहर अच्छा तरीका इस तरह HtmlGenericSelfCloseControl बनाने के लिए है (सी # कोड के लिए खेद है, लेकिन आप VB.NET में इस rewritting साथ कोई समस्या नहीं होनी चाहिए):

public class HtmlGenericSelfCloseControl : HtmlGenericControl 
{ 
    public HtmlGenericSelfCloseControl() 
     : base() 
    { 
    } 

    public HtmlGenericSelfCloseControl(string tag) 
     : base(tag) 
    { 
    } 

    protected override void Render(HtmlTextWriter writer) 
    { 
     writer.Write(HtmlTextWriter.TagLeftChar + this.TagName); 
     Attributes.Render(writer); 
     writer.Write(HtmlTextWriter.SelfClosingTagEnd); 
    } 

    public override ControlCollection Controls 
    { 
     get { throw new Exception("Self closing tag can't have child controls"); } 
    } 

    public override string InnerHtml 
    { 
     get { return String.Empty; } 
     set { throw new Exception("Self closing tag can't have inner content"); } 
    } 

    public override string InnerText 
    { 
     get { return String.Empty; } 
     set { throw new Exception("Self closing tag can't have inner text"); } 
    } 
} 

और बजाय इसका इस्तेमाल:

pDoc.Controls.Add(New Label With {.Text = "whatever"}) 
pDoc.Controls.Add(New HtmlGenericSelfCloseControl("br")) 

एक सरल विकल्प (यदि आप Page के संदर्भ में है) के रूप में आप Page.ParseControl उपयोग करने का प्रयास कर सकते हैं:

pDoc.Controls.Add(New Label With {.Text = "whatever"}) 
pDoc.Controls.Add(Page.ParseControl("br")) 
+0

'HtmlControl' से प्राप्त करना आसान नहीं होगा? यदि आप एक्सएचटीएमएल-स्टाइल सेल्फ-क्लोजिंग टैग चाहते हैं तो आपको केवल कन्स्ट्रक्टर की आवश्यकता होगी, और संभवतः 'रेंडरएट्रिब्यूट्स' का ओवरराइड होगा। –

+0

@ रिचर्डडिमिंग शायद सबसे अधिक हां, मैंने कुछ समय पहले इस परियोजना को मेरी परियोजनाओं में लिखा था और मैंने इसे रेफैक्टरेशन के लिए विचार किए बिना चिपकाया था। – tpeczek

+0

पेज। पर्स कंट्रोल ("बीआर") मेरे लिए काम नहीं करता है। पेज। पर्स कंट्रोल ("
") काम करता है। – JJS

21

वास्तव में आप उपयोग कर सकते हैं;

pDoc.Controls.Add(new LiteralControl("<br/>")); 

new HtmlGenericControl("br") जबकि दो <br>, यह केवल अपने HTML <br/> टैग को जोड़ने जाएगा जोड़ती है, ताकि आप सिर्फ 1 अंतरिक्ष रेखा है। इस तस्वीर में मैंने उस कोड ब्लॉक के साथ उन ब्रेक को जोड़ा।

enter image description here

भी इसी तरह यहाँ प्रश्न: Server control behaving oddly

+0

आपके उत्तर के लिए धन्यवाद। यह बढ़िया काम करता है।मैं उत्साहित हूं, लेकिन सही उत्तर के रूप में चिह्नित नहीं हूं क्योंकि मैं अपने प्रश्न के पिछले और अधिक विशिष्ट मानता हूं। – adripanico

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