Cómo: Crear instancias de controles de usuario ASP.NET mediante programación
Actualización: noviembre 2007
La creación mediante programación de una instancia de un control de servidor en una página Web ASP.NET es muy similar a la creación de un control de usuario.
Para crear una instancia de un control de usuario mediante programación
En el control de usuario, asegúrese de que la directiva @ Control contiene un atributo ClassName que asigna una clase al control de usuario.
En el ejemplo siguiente se establece el atributo ClassName para realizar el establecimiento inflexible de tipos en un control de usuario.
<%@ Control className="MyUserControl" %>
En la página en la que desea trabajar con el control de usuario, cree una referencia a dicho control con la directiva @ Reference.
Cuando cree el control de usuario mediante programación, el tipo inflexible para dicho control estará disponible para la página Web ASP.NET sólo después de haber creado una referencia al mismo. Por ejemplo, el código siguiente crea una referencia a un control de usuario creado en el archivo MyUserControl.ascx.
<%@ Reference Control="MyUserControl.ascx" %>
Nota: Utilice la directiva @ Reference cuando vaya a cargar el control mediante programación. Utilice la directiva @ Register cuando agregue un control de usuario a la página mediante declaración. Para obtener información detallada, vea Cómo: Incluir un control de usuario en una página Web ASP.NET.
Cree una variable de instancia para el control de usuario, utilizando el nombre de clase del control. La clase será parte del espacio de nombres ASP.
Por ejemplo, si desea crear una instancia del control de usuario declarada como clase Spinner, debe utilizar sintaxis como la siguiente:
Protected Spinner1 As ASP.Spinner
Protected ASP.Spinner Spinner1;
Cree una instancia del control de usuario en el código llamando al método LoadControl.
Asigne los valores de las propiedades según sea necesario y, a continuación, agregue el control a la colección ControlCollection de un contenedor de la página, como un control PlaceHolder.
Nota: Cuando se agregan controles al objeto ControlCollection mediante el método Add, dichos controles se colocan en la colección en el orden en el que se procesan. Si desea agregar un control en una posición específica de la colección, utilice el método AddAt y especifique la ubicación de índice en la que desea almacenar el control.
Ejemplo
En el ejemplo siguiente se muestra una página Web ASP.NET que carga un control de usuario mediante programación. La página incluye una directiva @ Reference para especificar el archivo del control. El método LoadControl lee el archivo y crea una instancia de éste en forma de control que se puede agregar a la página.
<%@ Page Language="VB" %>
<%@ Reference Control="~\Controls\Spinner.ascx" %>
<script >
Private Spinner1 As ASP.Spinner
Protected Sub Page_Load(ByVal sender As Object, _
ByVal e As System.EventArgs)
Spinner1 = CType(LoadControl("~\Controls\Spinner.ascx"), _
ASP.Spinner)
' Set MaxValue first.
Spinner1.MaxValue = 20
Spinner1.MinValue = 10
PlaceHolder1.Controls.Add(Spinner1)
End Sub
Protected Sub Button1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs)
Label1.Text = Spinner1.CurrentNumber.ToString()
End Sub
</script>
<html>
<head id="Head1" >
<title>Load User Control Programmatically</title>
</head>
<body>
<form id="form1" >
<div>
<asp:PlaceHolder runat=server ID="PlaceHolder1" />
<br />
<asp:Button ID="Button1"
Text="Button"
OnClick="Button1_Click" />
<br />
<br />
<asp:Label ID="Label1" Text=""></asp:Label>
</div>
</form>
</body>
</html>
<%@ Page Language="C#" %>
<%@ Reference Control="~/Controls/Spinner.ascx" %>
<script >
private ASP.Spinner Spinner1;
protected void Page_Load(object sender, EventArgs e)
{
Spinner1 = (ASP.Spinner)LoadControl("~/Controls/Spinner.ascx");
// Set MaxValue first.
Spinner1.MaxValue = 20;
Spinner1.MinValue = 10;
PlaceHolder1.Controls.Add(Spinner1);
}
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = Spinner1.CurrentNumber.ToString();
}
</script>
<html>
<head id="Head1" >
<title>Load User Control Programmatically</title>
</head>
<body>
<form id="form1" >
<div>
<asp:PlaceHolder runat=server ID="PlaceHolder1" />
<br />
<asp:Button ID="Button1"
Text="Button"
OnClick="Button1_Click" />
<br />
<br />
<asp:Label ID="Label1" Text=""></asp:Label>
</div>
</form>
</body>
</html>