Donnerstag, 26. April 2007

Kleine Helferlein - HTML-Code eines Webcontrols erzeugen

Manchmal kommt man in die Lage, den reinen HTML-Output eines Controls zu benötigen (z.B. für eine AJAX-Methode)
Für diese Aufgabe habe ichmir mal eine kleine Methode geschrieben die genau soetwas tut:

public string GetHtml(Control c)
{
StringBuilder sb = new StringBuilder();
HtmlTextWriter tw = new HtmlTextWriter(new StringWriter(sb));
c.RenderControl(tw);
return sb.ToString();
}


Ein kleines Beispiel für die Anwendnung (der Sinn sei mal dahingestellt):
Auf einer aspx-Seite wird beispielsweise ein Repeater-Control (ID=rep) verwendet, das irgendwelche Daten ausgibt.
Im der PageLoad der Seite könnte beispielsweise der Repeater befüllt werden und das Ergebnis (und nur das Ergebnis) als String zurückliefern. Den Output der aspx-Seite könnte man dann z.B. über eine AJAX-Funktion an anderen Stellen anzeigen lassen


protected void Page_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add("ID", System.Type.GetType("System.Int32"));
dt.Columns.Add("Text", System.Type.GetType("System.String"));
for (int i = 0; i < 50; i++)
{
DataRow dr = dt.NewRow();
dr["ID"] = 1;
dr["Text"] = String.Format("Text Nummer {0}", i.ToString());
dt.Rows.Add(dr);
}
rep.DataSource = dt;
rep.DataBind();
Response.Write(GetHtml(rep));
Response.End();
}

Das schöne daran ist, dass man wirklich alle Funktionen etc. der aspx-Seite verwenden kann um seine Ausgabe so zu erstellen wie man es braucht.

Keine Kommentare: