Capitulos de este wiki
  1. 1 Cómo obtener el contenido renderizado de un control ASP. NET

Cómo obtener el contenido renderizado de un control ASP. NET - Cómo obtener el contenido renderizado de un control ASP. NET

1 - Cómo obtener el contenido renderizado de un control ASP. NET

[editar]
Tutorial creado por Patxi Echarte. Extraido de: http://www.eslomas.com/index.php/archives/2005/02/28/como-obtener-el-contenido-renderizado-de-un-control-aspnet/
28 de Abril de 2006
En algunos casos es habitual cargar controles dinámicamente mediante el método LoadControl y añadirlos a la página. Esto es realmente sencillo y lo único que hay que tener en cuenta es el tipo al que se hace el cast al cargar el objeto. Así por ejemplo, si hacemos el cast a System.Web.UI.Control dispondremos únicamente de los métodos comunes a los controles web de ASP.NET, pero si necesitamos pasar algún valor al control, necesitaremos indicar el tipo específico al que hay que hacer el cast. Esto puede obligarnos a disponer de un interfaz ya precompilado si el control se compila “on the fly” y no tiene un archivo .cs asociado.

Una vez cargado un control dinámicamente lo habitual es añadirlo a algún contenedor en la página, pero puede darse el caso de que lo que necesitemos sea obtener su html, por ejemplo si necesitásemos mostrar la previsualización de un contenido. Para ello podemos utilizar el siguiente código:

Primero creo un control que
System.Web.UI.WebControls.PlaceHolder phAux = new System.Web.UI.WebControls.PlaceHolder();


Cargo el control

CMSControl ctrl = (ICMSControl)this.LoadControl(@"/cms/controls/Noticia.ascx");

Indicamos mediante el identificador del contenido que hay que mostrar
ctrl.ObjectToRender = obj.Id;

se llama al método GenerateOutput que hará
lo necesario para obtener la maquetación del objeto
ctrl.GenerateOutput();

Ahora necesitamos recuperar el html que contiene el control
una vez generada la maquetación, ya que no queremos mostrar
directamente el control en pantalla

StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
HtmlTextWriter htw = new HtmlTextWriter(sw);
ctrl.RenderControl(htw);

en sb tenemos un string con el contenido del control
metemos el html en un campo de texto por ejemplo
tbBody.Text = sb.ToString().Trim();

Para obtener el contenido HTML del control se utiliza el método RenderControl, el cual acepta un HtmlTextWriter como parámetro, y sobre el cual se realiza el renderizado. Para obtener el HtmlTextWriter lo que hago es crear primero un StringBuilder, un StringWriter sobre éste, y finalmente un HtmlTextWriter que trabaje sobre el StringWriter.
[editar]

1 opinión

CMSControl

Oye el CMSControl es una clase tuya o viene con la instalacion de Visual Studio?

Tutoriales relacionados con 'Cómo obtener el contenido renderizado de un control ASP. NET'

Autor y licencia de 'Cómo obtener el contenido renderizado de un control ASP. NET'

De forma general todos los contenidos de este web están sujetos a una licencia del tipo Creative Commons “Algunos derechos reservados”. Salvo que se diga lo contrario la única restricción impuesta si quieres utilizar algo de lo que aparece en este web, es la de indicar que el autor soy yo, Patxi Echarte.
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.