ASP.NET cómo Renderizar un control a HTML?

Tengo cualquier control ASP.NET. Quiero la cadena HTML ¿Cómo puedo obtener la cadena HTML del control?

Esto 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(); } 

La respuesta aceptada por David Basarab no funcionará si el control no es parte de la página. La respuesta de a7drew parece compleja innecesaria, no es necesario en Context o Server.Execute . 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(); } } 

Si su control es un control de usuario web, así es como puede obtener el HTML que emite desde otra página o manejador:

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