Procedimientos recomendados para representar escritores de texto móviles

Actualización: noviembre 2007

Durante la fase de representación, todos los adaptadores de dispositivos móviles de ASP.NET escriben sus resultados a través de una clase que hereda de la clase base MobileTextWriter. La clase real del sistema de escritura de texto puede ser específica del dispositivo de destino; el adaptador de página crea una instancia del sistema de escritura adecuado y la devuelve. Por ejemplo, para un dispositivo que requiere marcado cHTML, ChtmlPageAdapter devuelve un objeto ChtmlMobileTextWriter de su método CreateTextWriter.

La clase MobileTextWriter define un conjunto de propiedades y métodos comunes para los adaptadores. Para un adaptador de controles se pueden definir miembros auxiliares adicionales que sean específicos de la clase de sistema de escritura del adaptador. Los métodos de la clase base HtmlTextWriter, como Write, WriteLine y WriteBeginTag, están disponibles porque la clase MobileTextWriter hereda de la clase base HtmlTextWriter.

Método de representación con establecimiento inflexible de tipos

Normalmente, un adaptador necesita un sistema de escritura de texto de una clase concreta. Por ejemplo, WmlPageAdapter necesita utilizar un objeto WmlMobileTextWriter. El método Render de la interfaz IControlAdapter incluye un parámetro de tipo HtmlTextWriter. Por consiguiente, el adaptador debería reemplazar el método Render para hacer que esté disponible la clase de sistema de escritura de texto deseada o convertir el sistema de escritura a la clase necesaria.

En el ejemplo siguiente se muestra cómo reemplazar el método Render en un nuevo adaptador del conjunto de adaptadores XHTML para una clase CarControl personalizada. El nombre de este adaptador personalizado es XhtmlCarControlAdapter, que sigue las convenciones de nomenclatura establecidas para los nuevos adaptadores.

// Specialized XhtmlCarControlAdapter Render method
public void Render(XhtmlMobileTextWriter writer)
{
    ... [rendering code]
}
// Generic XhtmlCarControlAdapter Render method
public override void Render(HtmlTextWriter writer)
{
    Render((XhtmlMobileTextWriter)writer);
}

Iniciar y finalizar una respuesta

Antes de escribir una respuesta, un adaptador de página debe llamar a ciertos métodos en su método Render. He aquí una secuencia de acciones normal para un adaptador de páginas:

  1. Llamar al método BeginResponse del sistema de escritura.

  2. Llamar al método BeginFile del sistema de escritura, pasando la dirección URL de la página y el tipo de contenido deseado (tipo MIME) de los datos. Por ejemplo, un adaptador de página HTML pasaría text/html como tipo de contenido.

  3. Representar la página (normalmente el formulario activo).

  4. Llamar al método EndFile del sistema de escritura.

  5. Llamar al método EndResponse del sistema de escritura.

En el ejemplo de código siguiente se muestra un método Render simplepara un adaptador de página HTML.

public override void Render(MobileTextWriter writer)
{
    writer.BeginResponse();
    writer.BeginFile(Page.Request.Url.ToString(), "text/html");
    Page.ActiveForm.RenderControl(writer);
    writer.EndFile();
    writer.EndResponse();
}

Codificar la salida

La clase MobileTextWriter proporciona métodos auxiliares para codificar la representación. La codificación depende del dispositivo de destino. Por ejemplo, los dispositivos basados en WML requieren la codificación del signo de dólar ($). Los métodos auxiliares son los siguientes:

  • Para escribir texto codificado para un dispositivo de destino, el adaptador puede llamar al método WriteEncodedText del sistema de escritura.

  • Para escribir una dirección URL (incluidos los parámetros) para un dispositivo de destino, el adaptador puede llamar al método WriteEncodedUrl del sistema de escritura.

  • Para escribir el argumento de una dirección URL (la parte de la dirección URL que sigue al símbolo de consulta [?] de la cadena de agente de usuario) para un dispositivo de destino, el adaptador puede llamar al método WriteEncodedUrlParameter del sistema de escritura.

Almacenar resultados en la memoria caché

Las páginas Web de ASP.NET incluyen compatibilidad para almacenar en memoria caché los resultados de la página. Las páginas se puede almacenar en caché mediante una directiva @ OutputCache.

En las páginas Web móviles, los resultados almacenados en memoria caché deben definirse para que varíen en función del dispositivo de destino. Por ejemplo, si un dispositivo que ejecuta Microsoft Internet Explorer para Pocket PC solicita una página, la salida resultante debe almacenarse en caché y devolverse sólo para dispositivos que ejecuten Internet Explorer para Pocket PC.

De forma predeterminada, la cadena de agente de usuario HTTP controla la variación de las páginas Web móviles almacenadas en memoria caché. Sin embargo, los resultados de otros dispositivos pueden verse afectados por propiedades adicionales. Por ejemplo, un dispositivo con una sola cadena de agente de usuario podría tener varias configuraciones de tamaño de pantalla, y cada una de ellas puede brindar una salida distinta. Para permitir estas variaciones, el adaptador de página puede reemplazar la propiedad CacheVaryByHeaders.

Los controles de usuario Web de ASP.NET también admiten una directiva @ OutputCache que permite que sus resultados se almacenen de forma individual en la memoria caché. Es lo que se conoce como almacenamiento parcial en caché. Sin embargo, los controles de usuario de las páginas Web móviles no admiten esta directiva. Las páginas Web móviles no admiten el almacenamiento parcial en caché, ya que los resultados de un control de usuario pueden variar dependiendo del contenido del resto de la página.

Vea también

Conceptos

Interacción entre control y adaptador

Otros recursos

Agregar nuevos adaptadores de dispositivos y compatibilidad con dispositivos