Publicidad

Cargar dinámicamente controles de usuario en ASP.NET


Por Alex el 03/06/2007 , Comentar el artículo

Comparte este artículo:        




Utilizar controles de usuario (UserControls) es lo más común que podemos hacer con ASP.NET ya que son la forma natural de dividir las páginas en fracciones de código para que éste no se repita. Cargar un user control no tiene más secreto que arrástralo a hacia la página que queremos mostrarlo, pero … ¿qué pasa cuando tenemos varios controles para una misma página y queremos mostrarlos en función de los parámetros que reciba dicha página?, la solución es sencilla cargar dinámicamente los controles de usuario.


Para cargar de forma dinámica controles de usuario (WebUserControl.ascx) se utiliza el método LoadControl y los mostraremos en la página con un PlaceHolder. Vamos a ver esto con un ejemplo (el código del ejemplo esta al final del artículo).

Tenemos una página llamada controles.aspx y en ella ponemos un control PlaceHolder

Imagen

renombramos el nombre del control a PHE

<span lang="EN-US" style="font-size: 13px; line-height: 115%; font-family: Verdana; color: maroon"> <asp:PlaceHolder</span><span lang="EN-US" style="font-size: 13px; font-family: Verdana"><span style="color:red">ID</span><span style="color:blue">="PHE"</span><span style="color:red">runat</span><span style="color:blue">="server"></</span><span style="color:maroon">asp</span><span style="color:blue">:</span><span style="color:maroon">PlaceHolder</span><span style="color:blue">></span></span>



Después a nuestro proyecto le añadimos dos controles de usuarios, con el botón derecho del ratón sobre el proyecto seleccionamos Añadir nuevo elemento

Imagen

y añadimos un tercer control de usuario en un directorio llamado includes. Con esto tenemos:

Dos controles de usuario en el directorio raíz y uno en el directorio includes.

Ahora vamos a cargarlos dinámicamente en la página web.

Para cargarlos lo unico que tenemos que hacer es diferenciar que control queremos cargar de la siguiente forma:

<span lang="EN-US" style="font-size: 13px; font-family: Verdana; color: blue"> string strControl = Request.QueryString[<span style="color:teal">"control"</span>];</span><br> <span lang="EN-US" style="font-size: 13px; font-family: Verdana; color: blue"> switch (strControl) {</span><br> <span lang="EN-US" style="font-size: 13px; font-family: Verdana">          userControl_1 UC = (userControl_1)LoadControl(<span style="color:teal">"userControl_1.ascx"</span>);</span><br> <span lang="EN-US" style="font-size: 13px; font-family: Verdana">          PHE.Controls.Add(UC);</span><br> <span lang="EN-US" style="font-size: 13px; font-family: Verdana">  <span style="color:blue">        break</span>;</span><br> <span lang="EN-US" style="font-size: 13px; font-family: Verdana">      <span style="color:blue">case</span> <span style="color:teal">"2"</span>:</span><br> <span lang="EN-US" style="font-size: 13px; font-family: Verdana">           userControl_2 UC1 = (userControl_2)LoadControl(<span style="color:teal">"userControl_2.ascx"</span>);</span><br> <span lang="EN-US" style="font-size: 13px; font-family: Verdana">           PHE.Controls.Add(UC1);</span><br> <span lang="EN-US" style="font-size: 13px; font-family: Verdana">           <span style="color:blue">break</span>;</span><br> <span lang="EN-US" style="font-size: 13px; font-family: Verdana">      <span style="color:blue">case</span> <span style="color:teal">"3"</span>:  </span><br> <span lang="EN-US" style="font-size: 13px; font-family: Verdana">           <span style="color:teal">Control</span> UC2 = LoadControl(<span style="color:teal">"includes/userControl_3.ascx"</span>);</span><br> <span lang="EN-US" style="font-size: 13px; font-family: Verdana">           PHE.Controls.Add(UC2);</span><br> <span lang="EN-US" style="font-size: 13px; font-family: Verdana">           <span style="color:blue">break</span>;</span><br> <p class="MsoNormal"><span style="font-size: 13px; line-height: 115%; font-family: Verdana">}


La carga de los controles podemos hacerla de dos formas:

De esta forma ponemos el nombre del control delante del loadControl

userControl_1 UC = (userControl_1)LoadControl("userControl_1.ascx");


Con este otro metodo no es necesario el nombre de control declarando una variable del tipo control genérioco

Control UC2 = LoadControl("includes/userControl_3.ascx");


Ambas formas son validas y se puede utilizar la que mas guste.

Enlaces relacionadas:

Código fuente del artículo 



Saludos
Alex


Si te ha gustado el artículo compartelo en:        


Publicidad

También puede interesarte:

Limpiar datos de un combobox en winforms.

Limpiar datos de un combobox en winforms.

Por Alex, el 23/03/2010

Crear, copiar y borrar bases de datos SQL Server desde c#.

Crear, copiar y borrar bases de datos SQL Server desde c#.

Por Alex, el 07/03/2010

Escribir en un excel desde c#.

Escribir en un excel desde c#.

Por Alex, el 04/03/2010

Llenar un Repeater o DataList con un DataTable.

Llenar un Repeater o DataList con un DataTable.

Por Alex, el 29/12/2008

El evento SelectedIndexChanged no funciona

El evento SelectedIndexChanged no funciona

Por Alex, el 26/12/2008

Crear un DataSet vacío

Crear un DataSet vacío

Por Alex, el 26/12/2008


Añadir un comentarios:

Nombre:
Email: (no se publica el email)




SIGUENOS EN

ARCHIVO

Publicidad

.