Suggerimenti per ottimizzare il rendering dei writer mobili di testo

Durante la fase di rendering, tutti gli adattatori di dispositivi mobili ASP .NET scrivono il relativo output mediante un oggetto denominato writer di testo. Tale oggetto viene creato dalla classe base TextWriter.

L'oggetto TextWriter mobile viene creato da una classe che eredita dalla classe base MobileTextWriter. L'effettiva classe dell'oggetto TextWriter può essere specifica del dispositivo di destinazione; l'adattatore deve creare e restituire un writer adatto. L'adattatore dispone di un metodo CreateTextWriter, che viene chiamato dai controlli mobili ASP .NET per ottenere un writer.

La classe MobileTextWriter definisce un insieme di proprietà e metodi comuni utilizzati dagli adattatori. È possibile anche definire membri di supporto aggiuntivi specifici della classe writer per gli adattatori da utilizzare. È possibile utilizzare i metodi della classe base HtmlTextWriter, quali Write, WriteLine e WriteBeginTag poiché la classe MobileTextWriter eredita dalla classe base HtmlTextWriter.

Metodo di rendering tipizzato in modo sicuro

In genere, un adattatore richiede che il writer appartenga ad una classe specifica, ma il metodo Render dell'interfaccia IControlAdapter include un parametro che appartiene alla classe HtmlTextWriter generale. Pertanto, l'adattatore deve eseguire il cast del writer a una classe specifica.

A tal fine, la classe base dell'adattatore per un dispositivo deve eseguire l'override del metodo Render e chiamare un metodo Render specializzato che fornisce il writer della classe specifica. I singoli adattatori possono quindi eseguire l'override di questa classe base per restituire il writer corretto. In questo esempio viene illustrato l'override del metodo Render.

[C#]

// IControlAdapter.Render implementaton.
public override void Render(HtmlTextWriter writer)
{
   // The specialized writer class is the MobileTextWriter class.
   Render((MobileTextWriter)writer);
}
// Render is a specialized method that can be overridden by control adapters.
protected virtual void Render(MobileTextWriter writer)
{
   // Base implementation only renders child methods.
   RenderChildren(writer);
}

Inizio e fine di una risposta

Prima di scrivere una risposta, è necessario chiamare determinati metodi per l'oggetto TextWriter. Poiché la pagina è il controllo di primo livello di cui è stato eseguito il rendering, è opportuno che un adattatore di pagina esegua la chiamata di questi 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 (Multipurpose Internet Mail Extensions o MIME) dei 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 semplice per un adattatore di pagina HTML.

[C#]

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; ad esempio, i dispositivi basati su WML richiedono la codifica dei simboli del 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, inclusi i parametri, per un dispositivo di destinazione, l'adattatore può chiamare il metodo WriteEncodedUrl del writer.
  • Per scrivere un argomento dell'URL, ovvero la parte dell'argomento che segue il simbolo di interrogazione [?] nella stringa dell'agente utente, per un dispositivo di destinazione, l'adattatore può chiamare il metodo WriteEncodedUrlParameter del writer.

Memorizzazione nella cache dell'output

Le pagine Web Form ASP .NET includono il supporto automatico per la memorizzazione nella cache dell'output di pagina. Una pagina può essere memorizzata nella cache tramite una direttiva @ OutputCache.

Nelle pagine Web Form mobili l'output memorizzato nella cache deve 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.

In base all'impostazione predefinita, la stringa dell'agente utente HTTP controlla la variazione delle pagine Web Form mobili memorizzate nella cache. Tuttavia, gli altri dispositivi possono disporre di output su cui hanno effetto 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 tali variazioni , l'adattatore di pagina può eseguire l'override della proprietà CacheVaryByHeaders.

I controlli utente Web Form ASP .NET supportano inoltre una direttiva OutputCache che consente la memorizzazione separata nella cache del relativo output, nota come memorizzazione parziale nella cache. Tuttavia, i controlli utente nelle pagine Web Form mobili non contengono questa direttiva. Le pagine Web Form mobili non supportano la memorizzazione parziale nella cache, poiché l'output di un controllo utente può essere diverso in base al contenuto del resto della pagina.

Vedere anche

Interazione tra controlli e adattatori