2010-04-23 6 views
1

J'ai un court extrait de code C# comme ceci:Comment obtenir HTML d'objet HtmlControl en arrière-plan

HtmlGenericControl titleH3 = new HtmlGenericControl("h3"); 
titleH3.Attributes.Add("class", "accordion"); 

HtmlAnchor titleAnchor = new HtmlAnchor(); 
titleAnchor.HRef = "#"; 
titleAnchor.InnerText = "Foo Bar"; 
titleH3.Controls.Add(titleAnchor); 

Ce que je veux est un moyen de retourner une chaîne qui ressemble à ceci:

<h3 class="accordion"><a href="#">Foo Bar</a></h3> 

Des idées ou des suggestions?

Répondre

3

C'est la méthode que je l'ai utilisé dans le passé pour obtenir un code HTML de contrôle rendu à l'avance (assurez-vous d'inclure System.IO):

protected string ControlToHtml(Control c) 
{ 
    StringWriter sw = new StringWriter(); 
    HtmlTextWriter htmlWriter = new HtmlTextWriter(sw); 
    c.RenderControl(htmlWriter); 
    return sw.ToString(); 
} 

Retours ce pour votre cas de test:

<h3 class="accordion"><a href="#">Foo Bar</a></h3> 
0

N'existe-t-il pas une méthode Render qui l'oblige à émettre son propre code HTML?

1

Voici un exemple que vous pouvez utiliser pour étendre toute HtmlControl d'avoir une méthode de rendu():

public static string Render(this HtmlAnchor TheAnchor) 
{ 
    StringWriter sw = new StringWriter(); 
    HtmlTextWriter htmlWriter = new HtmlTextWriter(sw); 
    TheAnchor.RenderControl(htmlWriter); 
    return sw.ToString(); 
} 
+0

... ou étendre tous HTMLControls à la fois en changeant HtmlAnchor à HtmlControl dans le code ci-dessus. ;-) – mike

Questions connexes