2010-10-18 16 views
11

Je souhaite ajouter l'attribut href à un élément de lien. Voici mon code:Comment ajouter correctement des attributs lors du rendu avec un HtmlTextWriter?

System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder(); 
using (System.IO.StringWriter stringWriter = new System.IO.StringWriter(stringBuilder)) 
{ 
using (System.Web.UI.HtmlTextWriter htmlTextWriter = new System.Web.UI.HtmlTextWriter(stringWriter)) 
{ 

    htmlTextWriter.RenderBeginTag(HtmlTextWriterTag.Ul); 
    htmlTextWriter.RenderBeginTag(HtmlTextWriterTag.Li); 
    htmlTextWriter.RenderBeginTag(HtmlTextWriterTag.A); 
    htmlTextWriter.AddAttribute(HtmlTextWriterAttribute.Href, "http://www.google.de"); 
    htmlTextWriter.Write("Google"); 
    htmlTextWriter.RenderEndTag(); 
    htmlTextWriter.RenderEndTag(); 


    htmlTextWriter.RenderEndTag(); 
} 
} 

Il rend aussi:

<ul> 
<li><a>Google</a></li> 
</ul> 

Voilà ce que je pensais.

<ul> 
<li><a href="http://www.google.de">Google</a></li> 
</ul> 

Qu'est-ce qui n'a pas fonctionné et comment puis-je résoudre ce problème?

Veuillez ne pas répondre que je pourrais assembler la corde d'une autre manière. Je veux savoir comment je peux réaliser ceci avec le HtmlTextWriter

Répondre

30

En employant le HtmlTextWriter, vous devez ajouter les attributs AVANT que vous ajoutiez le nom de balise. Comme ceci:

htmlTextWriter.RenderBeginTag(HtmlTextWriterTag.Ul); 
    htmlTextWriter.RenderBeginTag(HtmlTextWriterTag.Li); 

    htmlTextWriter.AddAttribute(HtmlTextWriterAttribute.Href, "http://www.google.de"); 
    htmlTextWriter.RenderBeginTag(HtmlTextWriterTag.A); 
    htmlTextWriter.Write("Google"); 
    htmlTextWriter.RenderEndTag(); //A 

    htmlTextWriter.RenderEndTag(); //LI 
    htmlTextWriter.RenderEndTag(); //UL 

Il sera rendu comme ceci:

<ul> 
    <li><a href="http://www.google.de">Google</a></li> 
</ul> 
+0

Merci, n'ont pas pensé, mais il est logique;) – citronas

+13

-t-il? Je ne pense pas que ce soit logique du tout! – roryok

+0

@roryok Cela a du sens. La méthode RenderBeginTag rend réellement la balise, donc spécifier les attributs après est inutile. –