Condividi tramite


Suggerimenti per ottimizzare il rendering dei writer mobili di testo

Aggiornamento: novembre 2007

Durante la fase del rendering tutti gli adattatori di dispositivo mobile ASP.NET scrivono l'output utilizzando una classe che eredita dalla classe base MobileTextWriter. La classe effettiva del writer di testo può essere specifica del dispositivo di destinazione. L'adattatore di pagina crea un'istanza e restituisce un writer appropriato. Per un dispositivo che richiede tag cHTML ad esempio la classe ChtmlPageAdapter restituisce un oggetto ChtmlMobileTextWriter dal metodo CreateTextWriter.

La classe MobileTextWriter definisce un insieme di proprietà e metodi comuni per gli adattatori. È possibile definire per un adattatore di controllo ulteriori membri di supporto specifici della classe di writer dell'adattatore. I metodi della classe base HtmlTextWriter, ad esempio Write, WriteLine e WriteBeginTag, sono disponibili perché la classe MobileTextWriter eredita dalla classe base HtmlTextWriter.

Metodo di rendering fortemente tipizzato

Un adattatore necessita in genere di un writer di testo di una classe specifica. La classe WmlPageAdapter ad esempio deve utilizzare un oggetto WmlMobileTextWriter. Nel metodo Render dell'interfaccia IControlAdapter è incluso un parametro di tipo HtmlTextWriter. L'adattatore pertanto deve eseguire l'override del metodo Render per rendere disponibile la classe del writer di testo desiderata o eseguire il cast del writer sulla classe richiesta.

Nell'esempio riportato di seguito viene descritto l'override del metodo Render in un nuovo adattatore del set di adattatori XHTML per una classe CarControl personalizzata. Il nome di questo adattatore personalizzato è XhtmlCarControlAdapter, che segue convenzioni di denominazione definite per i nuovi adattatori.

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

Inizio e fine di una risposta

Prima di scrivere una risposta, un adattatore di pagina deve chiamare alcuni metodi nel metodo Render. Di seguito è riportata una sequenza tipica di azioni per un adattatore di pagina:

  1. Chiamare il metodo BeginResponse del writer.

  2. Chiamare il metodo BeginFile del writer, passando l'URL della pagina e il tipo di contenuto (tipo MIME) di dati desiderato. Un adattatore di pagina HTML ad esempio passa text/html come tipo di contenuto.

  3. Eseguire il rendering della pagina, in genere il form attivo.

  4. Chiamare il metodo EndFile del writer.

  5. Chiamare il metodo EndResponse del writer.

Nell'esempio riportato di seguito viene illustrato un metodo Render sempliceper un adattatore di pagina 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();
}

Codifica dell'output

La classe MobileTextWriter fornisce inoltre metodi di supporto per codificare il rendering. La codifica dipende dal dispositivo di destinazione. I dispositivi WML ad esempio richiedono la codifica dei segni di dollaro ($). Di seguito sono descritti i metodi di supporto.

  • Per scrivere testo codificato per un dispositivo di destinazione, l'adattatore può chiamare il metodo WriteEncodedText del writer.

  • Per scrivere un URL per un dispositivo di destinazione, inclusi i parametri, l'adattatore può chiamare il metodo WriteEncodedUrl del writer.

  • Per scrivere per un dispositivo di destinazione un argomento dell'URL, ovvero la parte dell'URL che segue il simbolo di interrogazione [?] nella stringa dell'agente utente, l'adattatore può chiamare il metodo WriteEncodedUrlParameter del writer.

Memorizzazione nella cache dell'output

Nelle pagine Web ASP.NET è incluso il supporto per la memorizzazione nella cache dell'output di pagina. Una pagina può essere memorizzata nella cache tramite una direttiva @ OutputCache.

Nelle pagine Web per dispositivi mobili l'output memorizzato nella cache deve essere impostato in modo da variare in base al dispositivo di destinazione. Se, ad esempio, un dispositivo in cui è in esecuzione Microsoft Internet Explorer per Pocket PC richiede una pagina, l'output risultante deve essere memorizzato nella cache e restituito solo per gli altri dispositivi in cui è in esecuzione Internet Explorer per Pocket PC.

Per impostazione predefinita, la stringa dell'agente utente HTTP controlla la variazione delle pagine Web per dispositivi mobili memorizzate nella cache. L'output di altri dispositivi tuttavia può essere influenzato anche da altre proprietà. Un dispositivo, ad esempio, con un'unica stringa dell'agente utente può disporre di più impostazioni delle dimensioni dello schermo, per ognuna delle quali esiste un output differente. Per consentire queste variazioni, l'adattatore di pagina può eseguire l'override della proprietà CacheVaryByHeaders.

I controlli utente Web ASP.NET supportano inoltre una direttiva @ OutputCache che consente la memorizzazione separata nella cache del relativo output, meccanismo denominato memorizzazione parziale nella cache. I controlli utente nelle pagine Web per dispositivi mobili tuttavia non supportano questa direttiva. Le pagine Web per dispositivi mobili non supportano la memorizzazione parziale nella cache, poiché l'output di un controllo utente può variare a seconda del contenuto del resto della pagina.

Vedere anche

Concetti

Interazione tra controlli e adattatori

Altre risorse

Aggiunta di nuovi adattatori di dispositivo e supporto per dispositivi