Compartir a través de


Procesar un control de servidor ASP.NET

Por procesamiento se entiende la creación de una representación visual en una superficie de presentación. En el caso de solicitudes Web, el procesamiento real lo realiza un explorador Web del cliente u otro dispositivo de presentación. La tarea del marco de trabajo de páginas de ASP.NET es enviar HTML (o texto en otro lenguaje de marcado como XML o WML) en respuesta a una solicitud Web. La tarea de una página y de sus controles secundarios es escribir el contenido de marcado en una secuencia de salida. Para ello, la clase base System.Web.UI.Control proporciona el método Render, que tiene la firma siguiente.

protected virtual void Render(HtmlTextWriter writer);
[Visual Basic]
Overridable Protected Sub Render(ByVal writer As HtmlTextWriter)

La clase System.Web.UI.HtmlTextWriter encapsula una secuencia de salida para escribir contenido de marcado. En el caso más simple, un creador de controles puede reemplazar Render para pasar HTML (u otro contenido de marcado) como argumento de cadena al método Write de una instancia de HtmlTextWriter.

protected override void Render(HtmlTextWriter output) {
    output.Write ("<h3> Hello </h3>");
}
[Visual Basic]
Protected Overrides Sub Render(output As HtmlTextWriter)
    output.Write("<h3> Hello </h3>")
End Sub

HtmlTextWriter proporciona muchos métodos de utilidades que simplifican la escritura de HTML. Debe utilizarlos en lugar de pasar directamente cadenas de texto a Write puesto que facilitan la legibilidad y reutilización del código (y no se precisa un programador experto en los detalles de la sintaxis de HTML). En la clase HtmlTextWriter encontrará ejemplos de estos métodos de utilidades. HtmlTextWriter también proporciona conversiones automáticas entre las distintas versiones de HTML para el procesamiento a alto y bajo nivel.

Resulta más eficiente hacer varias llamadas a HtmlTextWriter.Write que concatenar cadenas para formar una sola y pasarla al método Write como argumento.

**Nota   **Por simplicidad, en algunos ejemplos de la documentación se pasan cadenas de texto directamente a HtmlTextWriter.Write. Sin embargo, en los controles es recomendable usar los métodos de utilidades de HtmlTextWriter.

La clase base Control proporciona el método RenderChildren para procesar el contenido de sus controles secundarios (si existen).

protected virtual void RenderChildren(HtmlTextWriter writer);
[Visual Basic]
Overridable Protected Sub RenderChildren(ByVal writer As HtmlTextWriter)

Un control compuesto puede procesar contenido adicional al procesado por sus controles secundarios antes o después de invocar al método RenderChildren. En el fragmento de código siguiente se muestra un ejemplo.

public class Composite : Control {
    ...
    protected override void Render(HtmlTextWriter writer) {
       writer.Write ("My child controls are rendered below.");
       RenderChildren(writer);
       writer.Write ("My child controls are rendered above.");
    }
}
[Visual Basic]
Public Class Composite
   Inherits Control
   ...
   Protected Overrides Sub Render(writer As HtmlTextWriter)
      writer.Write("My child controls are rendered below.")
      RenderChildren(writer)
      writer.Write("My child controls are rendered above.")
   End Sub
End Class

La implementación de Render en la clase Control siempre invoca a RenderChildren. Si no desea que se procesen los controles secundarios de un control, reemplace RenderChildren con un método que no haga nada, como se muestra en el fragmento de código siguiente.

protected override void RenderChildren(HtmlTextWriter writer) {
    // Do nothing so that child controls are not rendered.
}
[Visual Basic]
Protected Overrides Sub RenderChildren(writer As HtmlTextWriter)
    ' Do nothing so that child controls are not rendered.
End Sub

Métodos de procesamiento de WebControl

Además de los métodos de procesamiento que proporciona la clase base Control, la clase System.Web.UI.WebControls.WebControl ofrece otros métodos que también facilitan el procesamiento.

El método AddAttributesToRender permite a un control derivado de WebControl especificar atributos HTML adicionales y estilos de hoja de estilos en cascada para procesarse. En el ejemplo siguiente se muestra la forma en que un control de botón puede escribir sus atributos en la secuencia. Observe la llamada a base.AddAttributestoRender, que asegura la preservación de los atributos procesados por la clase base.

protected override void AddAttributesToRender(HtmlTextWriter writer) {
    writer.AddAttribute(HtmlTextWriterAttribute.Type, "submit");
    writer.AddAttribute(HtmlTextWriterAttribute.Name, UniqueID);
    writer.AddAttribute(HtmlTextWriterAttribute.Value, Text);
    base.AddAttributesToRender(writer);
}
[Visual Basic]
Protected Overrides Sub AddAttributesToRender(writer As HtmlTextWriter)
    writer.AddAttribute(HtmlTextWriterAttribute.Type, "submit")
    writer.AddAttribute(HtmlTextWriterAttribute.Name, UniqueID)
    writer.AddAttribute(HtmlTextWriterAttribute.Value, [Text])
    MyBase.AddAttributesToRender(writer)
End Sub

Los métodos RenderBeginTag y RenderEndTag permiten a los controles derivados de WebControl reemplazar las etiquetas de comienzo y final de los elementos de HTML. El método RenderContents permite a un control especificar el contenido incluido entre las etiquetas.

Nota   Para escribir texto en la secuencia de salida de un control de servidor Web (una clase derivada de WebControl), debe reemplazar el método RenderContents, en lugar de reemplazar directamente el método Render. De este modo se asegura que la funcionalidad de procesamiento que proporciona WebControl (por ejemplo, la emisión de atributos) se mantenga. Para obtener más información, vea Ejemplos de procesamiento de un control de servidor.

Vea también

Mantener el estado en un control | Procesar ejemplos de un control de servidor