Información general sobre la arquitectura del comportamiento adaptable de los controles
Actualización: noviembre 2007
El comportamiento adaptable de los controles es el que se personaliza para los dispositivos de destino. ASP.NET 2.0 proporciona una arquitectura adaptable que permite interceptar las fases clave del ciclo de vida de un control y sustituirlas por un comportamiento personalizado. De forma predeterminada, el marco de trabajo para páginas ASP.NET asigna una sola instancia de un adaptador a cada control para cada solicitud. En la mayoría de los casos, esta asignación predeterminada es bastante flexible como para satisfacer en su mayor parte las necesidades del desarrollador. En casos específicos, se puede derivar un adaptador personalizado y asignarlo a un control para responder a requisitos adicionales sobre el comportamiento de un control con respecto a un dispositivo o a una serie de dispositivos determinados.
Un ejemplo común de comportamiento de control adaptable es la representación adaptable, con la que una página Web ASP.NET se representa de forma específica para el explorador o el marcado. Esto resulta especialmente útil para escribir aplicaciones compatibles con exploradores que utilizan distintos lenguajes de marcado. Existen varios medios de controlar la representación adaptable de una página Web en ASP.NET: desde especificar la representación XHTML predeterminado de la aplicación hasta proporcionar un objeto ControlAdapter personalizado. Proporcionar un objeto ControlAdapter personalizado es una tarea avanzada y no es necesaria para la mayoría de los usuarios.
Puede controlar la representación adaptable de las formas siguientes:
Configure la aplicación para representar varios marcados.
Utilice la clase XhtmlTextWriter o ChtmlTextWriter para personalizar las etiquetas de control y los atributos.
Cree una clase TextWriter personalizada para representar el resultado.
Utilice marcado de dispositivo declarativo o filtros de explorador para determinar cómo se establecen las propiedades de control a partir de las definiciones de filtro de los dispositivos.
Proporcione un adaptador de control personalizado que le permita sustituir un método de ciclo de vida de adaptador ante el método de ciclo de vida predeterminado para un control.
Además de la representación adaptable, otro comportamiento de control que se puede adaptar o especificar según un dispositivo de destino incluye lo siguiente:
Procesar datos de devolución.
Administrar el estado de vista.
Evitar que se adapte un control personalizado.
Representación de controles y páginas ASP.NET
Representación predeterminada
En la representación predeterminada de la página Web ASP.NET, se crea una instancia de la clase HtmlTextWriter y se llama al método RenderControl de forma recursiva mediante el parámetro que se establece como instancia de la clase HtmlTextWriter. Cada control de la jerarquía de controles de página anexa su marcado al final del objeto HtmlTextWriter. El contenido del objeto HtmlTextWriter resultante es lo que se representa en el explorador resultante.
Al representar contenido HTML 3.2 en los clientes, ASP.NET utiliza automáticamente la clase Html32TextWriter. Para determinar el tipo de objeto TextWriter que se debe utilizar, el marco de trabajo para páginas ASP.NET consulta a la propiedad TagWriter del objeto Browser.
De forma predeterminada, cuando se utilizan exploradores que admiten el uso de HTML 4.0 o posterior, las páginas y los controles ASP.NET representan el formato que se ajusta al estándar XHTML 1.0 Transitional. Para especificar si ASP.NET representa marcado que se ajusta a los estándares XHTML, configure xhtmlConformance (Elemento, Esquema de configuración de ASP.NET) en el archivo Web.config para la aplicación. Para obtener más información acerca de ASP.NET y XHTML, vea ASP.NET y XHTML. Para obtener más información acerca del ciclo de vida de las páginas, vea Información general sobre el ciclo de vida de una página ASP.NET.
Utilizar un objeto TextWriter personalizado
De forma predeterminada, ASP.NET utiliza el objeto TextWriter adecuado para el dispositivo solicitante. Cuando se necesita una mayor control sobre el objeto TextWriter, es posible utilizar una clase existente que herede de la clase HtmlTextWriter o bien crear un escritor de texto personalizado.
Las clases XhtmlTextWriter y ChtmlTextWriter son dos clases del marco de trabajo para páginas ASP.NET que heredan de las clases HtmlTextWriter y Html32TextWriter, respectivamente. Las clases XhtmlTextWriter y ChtmlTextWriter proporcionan funciones adicionales de representación adaptable. Por ejemplo:
La clase XhtmlTextWriter es útil para representar marcado XHTML en dispositivos móviles y proporciona métodos para personalizar atributos de los elementos XHTML procesados.
La clase ChtmlTextWriter resulta útil para representar cHTML o HTML compacto en dispositivos con memoria y capacidad de CPU limitadas, junto con pantallas pequeñas, capacidades de formato reducidas y un número limitado de opciones de entrada, como el teclado de un teléfono celular.
Si crea un escritor de texto personalizado o desea especificar un escritor de texto determinado a fin de representar el resultado para un dispositivo determinado, debe asignar el escritor de texto al dispositivo que utiliza el atributo markupTextWriterType del elemento controlAdapters en un archivo .browser para la aplicación.
Filtrado de dispositivos
El filtrado de dispositivos permite personalizar de forma declarativa los aspectos de la representación de los resultados de una propiedad en un control de servidor Web. Puede aplicar el filtrado a propiedades de control, atributos personalizados y plantillas. También puede utilizar el filtrado de dispositivos para algunos atributos en las directivas @ Page y @ Control. Si se especifican varios filtros de dispositivo para una propiedad o un atributo, el filtro más específico tiene prioridad.
- Las definiciones de filtro de dispositivo que se utilizan para filtrar resultados están basadas en la definición de tipos de explorador, según la aplicación. Los archivos de definición del explorador predeterminados están en el directorio %SystemRoot%\Microsoft.NET\Framework\versionNumber\CONFIG\Browsers. Los archivos de definición del explorador que se especifican en la carpeta App_Browsers para la aplicación se combinan con los archivos de definición predeterminados.
Para obtener más información acerca del filtrado de dispositivos, vea Información general sobre el filtrado de dispositivos de ASP.NET. Para obtener más información acerca del formato de archivo .browser, vea Esquema de archivos de definición de explorador (Elemento browsers).
Adaptadores de controles
Información general
Para personalizar el comportamiento de una página o de un control, ASP.NET 2.0 permite especificar un objeto ControlAdapter que adapta o modifica el comportamiento en puntos clave del ciclo de vida del control. En cada etapa del ciclo de vida en la que se realiza una llamada a un método de ciclo de vida, el marco de trabajo para páginas ASP.NET comprueba si hay un adaptador asociado para el control y llama al método asociado del adaptador en lugar de al método del control. En muchos casos, el método del adaptador quizá se limite a remitirle de nuevo al método de control. Una excepción a este comportamiento se da en los adaptadores para la administración de estados en que el comportamiento adaptable es aditivo con respecto al estado de control.
Entre las situaciones en las que puede interesarle reemplazar el comportamiento de un control con un adaptador de control se encuentran las siguientes:
Para proporcionar un procesamiento específico del destino durante una fase determinada del ciclo de vida del control.
Por ejemplo,puede utilizar el método OnInit de la clase ControlAdapter para realizar tareas de inicialización específicas del control al que está asociado el adaptador y específicas del dispositivo de destino en el que se representa el control.
Para personalizar la representación específica del destino.
Por ejemplo, puede utilizar los métodos Render y RenderChildren para generar marcado específico del destino.
Los controles WebControlAdapter y PageAdapter
La clase ControlAdapter es una clase abstracta que define la funcionalidad básica de todos los adaptadores. Actúa como clase base para las clases WebControlAdapter y PageAdapter.
La clase WebControlAdapter es el punto de partida para representar los controles que heredan de forma adaptativa de la clase WebControl. Además de los métodos de clase ControlAdapter, la clase WebControlAdapter agrega varios métodos específicos para representar etiquetas.
La clase PageAdapter abstracta es el punto de partida para representar de forma adaptativa una página Web.
Además, la clase PageAdapter define propiedades y métodos que permiten la representación adaptable en el contexto de tareas típicas en el nivel de las páginas, como el almacenamiento en caché o la administración de la persistencia de estado de las páginas. Por ejemplo, además de almacenar en caché las páginas a partir de parámetros independientes del destino, quizá deba almacenarlas en caché a partir del tipo de explorador de destino. En esa situación, reemplazaría la propiedad CacheVaryByParams de la clase PageAdapter para que se devolviera una lista de los parámetros GET o POST adicionales a fin de controlar el almacenamiento en caché específico del destino.
De forma similar a lo que ocurre con los escritores de texto, para que el marco de trabajo para páginas ASP.NET reconozca los adaptadores de control personalizados, éstos deben definirse en el elemento controlAdapters del archivo .browser para la aplicación. Para obtener más información acerca del formato de archivo .browser, vea Esquema de archivos de definición de explorador (Elemento browsers).
En los modelos de diseño para crear adaptadores se incluyen las directrices siguientes:
Un control que hereda de la clase Control debería tener un adaptador que herede de la clase ControlAdapter.
Un control que hereda de la clase WebControl debería tener un adaptador que herede de la clase WebControlAdapter.
Si va a crear controles personalizados y necesita ampliar la funcionalidad de los adaptadores, deberá crear adaptadores de clase base para los controles.
Vea también
Conceptos
Información general sobre el ciclo de vida de una página ASP.NET
Información general sobre el filtrado de dispositivos de ASP.NET
Referencia
xhtmlConformance (Elemento, Esquema de configuración de ASP.NET)
Esquema de archivos de definición de explorador (Elemento browsers)