Crear un control de usuario basado en plantilla
Puede crear controles de usuario que implementen plantillas, una característica de ASP.NET que permite separar los datos del control de su presentación. Los controles basados en plantilla no proporcionan una interfaz de usuario (IU). La interfaz de usuario del control la proporciona un programador de páginas mediante plantillas en pantalla, que permiten al programador personalizar la interfaz de usuario del control. La creación de controles de usuario basados en plantillas le permitirán agregar controles de usuario a las páginas de su aplicación con facilidad, sin tener que compilar un control personalizado en un archivo .dll.
Para obtener más información sobre cómo crear un control con plantilla, vea Desarrollar un control con plantillas.
Para crear un control de usuario
Cree de forma declarativa un control de servidor Web Placeholder ASP.NET en el archivo .ascx.
Implemente una propiedad de tipo ITemplate en el bloque de declaración de código del control o clase de código subyacente.
Defina, en el mismo bloque de código, un control de servidor que implemente INamingContainer como contenedor en el que crear una instancia de la plantilla. Éste se denomina contenedor de nomenclatura de la plantilla.
Nota Este control se convierte básicamente en una clase anidada del control de usuario, aunque esto no es necesario.
Aplique TemplateContainerAttribute a la propiedad ITemplate y pase el tipo del contenedor de nomenclatura de la plantilla como argumento del constructor o del atributo.
En el método Page_Init, repita los siguientes pasos una o más veces:
Cree una instancia de la clase del contenedor de nomenclatura.
Cree una instancia de la plantilla en el contenedor de nomenclatura.
Agregue la instancia del contenedor de nomenclatura a la propiedad Controls del control de servidor PlaceHolder.
Nota ** **Desde el punto de vista de la página que utiliza el control de usuario, la sintaxis del control de usuario con plantilla es idéntica a cómo sería con un control personalizado con plantilla.
El ejemplo siguiente demuestra un control de usuario con plantilla y una página que lo contiene.
Nota Este ejemplo expone solamente una propiedad de plantilla, pero se pueden exponer tantas propiedades de plantilla como sea necesario para que la aplicación funcione correctamente.
El control de usuario con plantilla:
<%@ Control language="VB" debug="True" %>
<script runat="server" >
Private messageTemplate As ITemplate = Nothing
<TemplateContainer(GetType(MessageContainer))>Public Property MessageTemplate() As ITemplate
Get
Return messageTemplate
End Get
Set
messageTemplate = value
End Set
End Property
Sub Page_Init()
If Not (messageTemplate Is Nothing) Then
Dim i As Integer
For i = 0 To 4
Dim container As New MessageContainer(i)
messageTemplate.InstantiateIn(container)
msgholder.Controls.Add(container)
Next i
End If
End Sub 'Page_Init
Public Class MessageContainer
Inherits Control
Implements INamingContainer
Private index As Integer
Friend Sub New(index As Integer)
Me.index = index
End Sub 'New
Public ReadOnly Property Index() As Integer
Get
Return index
End Get
End Property
End Class 'MessageContainer
</script>
<hr>
<asp:placeholder runat=server id=msgholder/>
<hr>
[C#]
<%@ Control language=c# debug=true %>
<script runat=server>
private ITemplate messageTemplate = null;
[ TemplateContainer(typeof(MessageContainer)) ]
public ITemplate MessageTemplate {
get { return messageTemplate; }
set { messageTemplate = value; }
}
void Page_Init() {
if (messageTemplate != null) {
for (int i=0; i<5; i++) {
MessageContainer container = new MessageContainer(i);
messageTemplate.InstantiateIn(container);
msgholder.Controls.Add(container);
}
}
}
public class MessageContainer: Control, INamingContainer {
private int index;
internal MessageContainer(int index) { this.index = index; }
public int Index { get { return index; } }
}
</script>
<hr>
<asp:placeholder runat=server id=msgholder/>
<hr>
La página ASP.NET que contiene el control de usuario con plantilla:
<%@ language=vb debug=true %>
<%@ Register TagPrefix="acme" tagname="test" src=TemplatedUserControl.ascx %>
<html>
<script runat=server>
Sub Page_Load()
DataBind()
End Sub 'Page_Load
</script>
<body>
' The Container in the data-binding syntax will automatically be of type
' MessageContainer, since the TemplateContainer attribute was applied
' to the ITemplate class in the .ascx file.
<form runat=server>
<acme:test runat=server>
<MessageTemplate>
Hello #<%# Container.Index %>.<br>
</MessageTemplate>
</acme:test>
</form>
</body>
</html>
[C#]
<%@ language=c# debug=true %>
<%@ Register TagPrefix="acme" tagname="test" src=TemplatedUserControl.ascx %>
<html>
<script runat=server>
void Page_Load() {
DataBind();
}
</script>
<body>
// The Container in the data-binding syntax will automatically be of type
// MessageContainer, since the TemplateContainer attribute was applied
// to the ITemplate class in the .ascx file.
<form runat=server>
<acme:test runat=server>
<MessageTemplate>
Hello #<%# Container.Index %>.<br>
</MessageTemplate>
</acme:test>
</form>
</body>
</html>
Vea también
Introducción a los controles de usuario de formularios Web Forms | Modelo de código de formularios Web Forms | Incluir un control de usuario en una página de formularios Web Forms | @ Control | UserControl