ASP.NET como processar um controle para HTML?

Eu tenho qualquer controle do asp.net. Eu quero a string HTML como faço para obter a string HTML do controle?

Isso parece funcionar.

public string RenderControlToHtml(Control ControlToRender) { System.Text.StringBuilder sb = new System.Text.StringBuilder(); System.IO.StringWriter stWriter = new System.IO.StringWriter(sb); System.Web.UI.HtmlTextWriter htmlWriter = new System.Web.UI.HtmlTextWriter(stWriter); ControlToRender.RenderControl(htmlWriter); return sb.ToString(); } 

A resposta aceita por David Basarab não funcionará se o controle não fizer parte da página. A resposta de a7drew parece ser desnecessariamente complexa – não há necessidade em Context ou Server.Execute .

 private string RenderControl() { var sb = new System.Text.StringBuilder(); using (var stWriter = new System.IO.StringWriter(sb)) using (var htmlWriter = new HtmlTextWriter(stWriter)) { var p = new Page(); var ctrl = (YourControl)p.LoadControl("~/controls/building blocks/YourControl.ascx"); ctrl.Visible = true; // do your own init logic if needed p.Controls.Add(ctrl); ctrl.RenderControl(htmlWriter); return sb.ToString(); } } 

Se o seu controle é um controle de usuário da web, é assim que você pode chegar ao HTML que ele emite de outra página ou manipulador:

 public void GetHtmlFromMySweetControl(HttpContext context) { HttpRequest httpRequest = context.Request; HttpResponse httpResponse = context.Response; string foo = httpRequest["foo"]; Page pageHolder = new Page(); string path = "~/usercontrols/MySweetControl.ascx"; MySweetControl ctrl = (MySweetControl)pageHolder.LoadControl(path); ctrl.BindProducts(foo); pageHolder.Controls.Add(ctrl); StringWriter sw = new StringWriter(); context.Server.Execute(pageHolder, sw, false); httpResponse.Write(sw.ToString()); }