2012-11-21 20 views
6

Belirli bir web sayfasına bazı içeriği arkadan kod ekliyorum. Bazı metinden sonra bir mola eklemek istediğiniz zaman, bu şekilde yapmak istiyorum: Ben içerik ekleyerek ediyorum ki HtmlGenericControl ("br") iki kez görüntüleniyor

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

, pDoc Panel olduğu. Ancak son HTML'ye iki br etiketi ekler.

Ben bu davranışı bu şekilde önlemek ettik:

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

Neyse, ben çok meraklıyım ve ben

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

bu şekilde davranmaktadır neden bilmek istiyorum. Ayrıca benim yaklaşımımın çok süslü olmadığını düşünüyorum. o nedenle benziyor bazı testlerden sonra

Selamlar,

+1

musunuz? – tpeczek

+0

evet, o haklıdır o

cevap

5

HtmlGenericControlkendinden kapanmasını desteklemediği olmasıdır.

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

HTML hiçbir </br> etiketi yoktur, bu nedenle iki <br /> etiket vardır gibi tarayıcı bunu gösterir: sunucu tarafında HtmlGenericControl("br") tedavi edilir. bunun dışında güzel yolu böyle HtmlGenericSelfCloseControl oluşturmaktır (C# kodu için üzgünüm ama VB.NET bu yeniden yazabilecek ile hiçbir sorunu olmalıdır):

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"); } 
    } 
} 

Ve onu kullanmak:

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

Daha basit bir alternatif (eğer Page başvurusunu varsa) gibi sen Page.ParseControl kullanarak deneyebilirsiniz:

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

0 HtmlControl'den miras almak daha kolay olmaz mı? O zaman XHTML tarzı kendi kendine kapanış etiketini istiyorsanız, kurucuya ve muhtemelen "RenderAttributes" ın bir geçersiz kılmasına ihtiyaç duyacaksınız. –

+0

@RichardDeeming Muhtemelen evet, bu kodları bir süre önce projelerimden birinde yazmıştım ve yeniden düzenleme yapmak için düşünmeden yapıştırdım. – tpeczek

+0

Page.ParseControl ("br") benim için çalışmıyor. Page.ParseControl ("
") çalışıyor. – JJS

21

Aslında kullanabilirsiniz; Sadece 1 uzay hattı olacak şekilde new HtmlGenericControl("br") Oysa

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

iki <br> bunun yalnızca HTML <br/> etiketi katacak ekler. Bu resimde, bu kodları söz konusu kod bloğuyla ekledim. Burada

Ayrıca

enter image description here

benzer soru: Eğer `

` değil `

` render emin Server control behaving oddly

+0

Cevabınız için teşekkür ederiz. İyi çalışıyor.Cevap veriyorum ama doğru cevap olarak işaretlemem, çünkü bir önceki soruya daha spesifik olarak bakıyorum. – adripanico