Desarrollar un control de servidor ASP.NET sencillo
En este tema se recorren los pasos necesarios para crear un control de servidor personalizado sencillo con una propiedad y que no provoca ni controla eventos.
Para crear un control de servidor ASP.NET sencillo
Defina una clase que se derive directa o indirectamente de System.Web.UI.Control.
using System; using System.Web.UI; public class FirstControl : Control{...} [Visual Basic] Imports System Imports System.Web.UI Public Class FirstControl Inherits Control End Class
La directiva using permite que el código haga referencia a los tipos desde un espacio de nombres para utilizar el nombre completo. Por lo que Control se resuelve en System.Web.UI.Control.
Coloque el control en un espacio de nombres. Se puede definir un espacio de nombres nuevo o utilizar uno existente. El nombre del espacio de nombres es el valor del seudoatributo de espacio de nombres de la directiva de página Register. (Por ejemplo,
<%@ Register TagPrefix="Custom" Namespace="CustomControls" Assembly = "CustomControls" %>
). Para ver un ejemplo de cómo se utiliza un control personalizado en una página ASP.NET, vea el ejemplo al final de este tema.namespace CustomControls { public class FirstControl : Control {...} ... } [Visual Basic] Namespace CustomControls Public Class FirstControl Inherits Control ... End Class End Namespace
Defina las propiedades que requiere el control. El fragmento de código siguiente define una propiedad denominada
Message
. Las propiedades son como campos inteligentes y tienen métodos de descriptores de acceso.private String message = "Hello"; //The Message property. public virtual String Message{ get{ return message; } set{ message = value; } } [Visual Basic] Private _message As String = "Hello" Public Overridable Property Message() As String Get Return _message End Get Set _message = value End Set End Property
Para obtener más información acerca de las propiedades, vea Información general sobre propiedades. Para definir las propiedades que mantienen su estado en las acciones de ida y vuelta, vea Mantener el estado en un control.
Reemplace el método Render que el control hereda de Control. Este método proporciona la lógica para enviar HTML al explorador del cliente. El HTML que el control envía al cliente se pasa como un argumento de cadena al método Write de una instancia de System.Web.UI.HtmlTextWriter, como se muestra en el siguiente ejemplo.
protected override void Render( HtmlTextWriter writer) { writer.Write("<font> "+ this.Message + "<br>" + "The date and time on the server: " + System.DateTime.Now.ToLongTimeString() + "</font>"); } [Visual Basic] Protected Overrides Sub Render(writer As HtmlTextWriter) writer.Write(("<font> " & Me.Message & "<br>" & _ "The time on the server is " & _ System.DateTime.Now.ToLongTimeString() & _ "</font>")) End Sub
La clase System.DateTime a la que se tiene acceso en este fragmento de código es una clase de utilidad que proporciona información de fecha y hora. Observe que esta clase se invoca en el servidor, por lo que devuelve la hora del servidor.
En el fragmento de código, el HTML sin formato se pasa simplemente como un argumento de cadena al método Write de HtmlTextWriter. Para obtener más información sobre cómo utilizar los métodos de HtmlTextWriter para simplificar el procesamiento de HTML y procesar un control que se derive de WebControl, vea Procesar un control de servidor ASP.NET.
Para simplificar, en este ejemplo
FirstControl
se deriva de Control. Si va a crear un control que realiza su propio procesamiento, derive de System.Web.UI.WebControls.WebControl para que el control pueda heredar propiedades específicas de la interfaz de usuario.Agregue atributos de tiempo de ejecución y tiempo de diseño para proporcionar metadatos personalizados para el control, según sea necesario. Algunos controles requieren atributos de tiempo de ejecución. Sirva de ejemplos de controles que requieren atributos de tiempo de ejecución aquellos que exponen plantillas, realizan enlaces de datos o precisan lógica de análisis personalizada. Para ver ejemplos de atributos de tiempo de ejecución, vea Desarrollar un control con plantillas. Los atributos de tiempo de diseño son necesarios si el control se va a utilizar en un diseñador visual, como Visual Studio.NET. Los atributos de tiempo de diseño no son necesarios para Common Language Runtime, aunque ofrecen metadatos imprescindibles para mostrar un control en tiempo de diseño. El fragmento de código siguiente aplica un atributo de tiempo de diseño a la propiedad
Message
definida en el paso 2.[Description("A message string to display to the user")] public virtual String Message{...} [Visual Basic] <Description("A message string to display to the user")> _ Public Overridable Property Message() As String ... End Property
Para obtener más información sobre los atributos de tiempo de diseño, vea Atributos de tiempo de diseño para componentes y Atributos y compatibilidad en tiempo de diseño.
Guarde, compile e implemente el control realizando los pasos siguientes.
- Cree un subdirectorio denominado /bin en el directorio raíz de la aplicación.
- Compile el archivo de código fuente en un ensamblado (.dll) y guarde el ensamblado en el subdirectorio /bin de la aplicación.
Por ejemplo, si el código fuente está en C# y se guarda en un archivo denominado FirstControl.cs, se podrá ejecutar el siguiente comando desde el directorio que contiene el archivo de código fuente.
csc /t[arget]:library /out:[path to bin]bin\CustomControls.dll /r[eference]:System.Web.dll /r:System.dll FirstControl.cs
La opción /r indica al compilador a qué ensamblados hace referencia el control.
El control ya está compilado y listo para utilizarse desde cualquier página ASP.NET en el directorio raíz de la aplicación (o cualquiera de sus subdirectorios).
A continuación se muestra el código completo de FirstControl
. El control está incluido en el espacio de nombres CustomControls
.
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace CustomControls
{
public class FirstControl : Control
{
private String message = "Hello";
public virtual String Message
{
get
{
return message;
}
set
{
message = value;
}
}
protected override void Render( HtmlTextWriter writer)
{
writer.Write("<font> "
+ this.Message + "<br>" + "The time on the server is " + System.DateTime.Now.ToLongTimeString()
+ "</font>");
}
}
}
[Visual Basic]
Option Explicit
Option Strict
Imports System
Imports System.Web.UI
Imports System.Web.UI.WebControls
Namespace CustomControls
Public Class FirstControl
Inherits Control
Private _message As String = "Hello"
Public Overridable Property Message() As String
Get
Return _message
End Get
Set
_message = value
End Set
End Property
Protected Overrides Sub Render(writer As HtmlTextWriter)
writer.Write(("<font> " + Me.Message + "<br>" + "The time on the server is " + System.DateTime.Now.ToLongTimeString() + "</font>"))
End Sub
End Class
End Namespace
Utilizar FirstControl en una página ASP.NET
En la siguiente página ASP.NET se utiliza el control personalizado que acaba de crear en el ejemplo anterior. La directiva de página Register permite a un programador de páginas crear un alias para un espacio de nombres, al tiempo que proporciona a ASP.NET el nombre del ensamblado que contiene el control. En el ejemplo se crea el alias Custom
para el espacio de nombres CustomControls
.
<%@ Register TagPrefix="Custom" Namespace="CustomControls" Assembly = "CustomControls" %>
<html>
<body>
<form runat=server>
Here is a custom ASP.NET server control.<br><br>
<Custom:FirstControl Message= "This control tells time. " runat=server/>
<br>
</form>
</body>
</html>
Vea también
Propiedades de los controles de servidor ASP.NET Eventos de los controles de servidor ASP.NET