Cenni preliminari sull'architettura del comportamento adattivo di un controllo
Aggiornamento: novembre 2007
In questo argomento vengono forniti i cenni preliminari sull'architettura del comportamento adattivo dei controlli di ASP.NET. L'architettura consente di estendere il rendering dei controlli in modo da supportare molti tipi diversi di browser, inclusi quelli dei dispositivi mobili.
Il comportamento adattivo di un controllo è un comportamento personalizzato per i dispositivi di destinazione. ASP.NET fornisce un'architettura adattiva che consente l'intercettazione di fasi chiave del ciclo di vita di un controllo e la relativa sostituzione con un comportamento personalizzato. Per impostazione predefinita, il framework della pagina ASP.NET associa una singola istanza di un adattatore a ciascun controllo per ciascuna richiesta. Nella maggior parte dei casi, questa associazione predefinita offre la flessibilità necessaria per soddisfare le esigenze degli sviluppatori. In casi speciali, è possibile derivare un adattatore personalizzato e associarlo a un controllo per soddisfare esigenze aggiuntive relative al comportamento del controllo su un determinato dispositivo o una famiglia di dispositivi.
Un esempio comune di comportamento adattivo di un controllo è costituito dal rendering adattivo, con cui il rendering di una pagina Web ASP.NET viene eseguito in modo specifico in base al browser o al markup. Questa funzionalità si rivela particolarmente utile per la creazione di applicazioni in grado di supportare browser che utilizzano diversi linguaggi markup. Il rendering di una pagina Web in ASP.NET può essere controllato in diversi modi, ad esempio specificando il rendering XHTML predefinito dell'applicazione o fornendo un oggetto ControlAdapter personalizzato. Per fornire un oggetto ControlAdapter personalizzato è richiesta un'attività avanzata non necessaria nella maggior parte degli scenari utente.
È possibile controllare il rendering adattivo nei seguenti modi:
Configurare l'applicazione per il rendering di più tipi di codice.
Utilizzare la classe XhtmlTextWriter o ChtmlTextWriter per personalizzare attributi e tag di controllo.
Creare una classe TextWriter personalizzata per il rendering dell'output.
Utilizzare filtri del browser o del codice del dispositivo di tipo dichiarativo per influire sull'impostazione delle proprietà dei controlli in base alle definizioni di filtri di periferica.
Fornire un adattatore di controllo personalizzato che consente di sostituire un metodo del ciclo di vita predefinito per un controllo con un metodo del ciclo di vita dell'adattatore.
Oltre al rendering adattivo, è possibile adattare o specificare il comportamento di un controllo in base a un dispositivo di destinazione nei seguenti casi:
Elaborazione di dati di postback.
Gestione dello stato di visualizzazione.
Prevenzione dell'adattamento di un controllo personalizzato.
Rendering di controlli e pagine ASP.NET
Rendering predefinito
Nel rendering predefinito di una pagina Web ASP.NET viene creata un'istanza della classe HtmlTextWriter e viene chiamato il metodo RenderControl in modo ricorsivo utilizzando il parametro impostato sull'istanza della classe HtmlTextWriter. Il codice di ciascun controllo nella gerarchia dei controlli della pagina viene aggiunto alla fine dell'oggetto HtmlTextWriter. Nel browser finale viene eseguito il rendering del contenuto della classe HtmlTextWriter risultante.
In caso di rendering di contenuto HTML 3.2 su client, ASP.NET utilizza automaticamente la classe Html32TextWriter. Per determinare il tipo di oggetto TextWriter da utilizzare, il framework della pagina ASP.NET esegue una query sulla proprietà TagWriter dell'oggetto Browser.
Per impostazione predefinita, quando si utilizzano browser che supportano HTML 4.0 o versione successiva, i controlli e le pagine ASP.NET eseguono il rendering del codice conforme allo standard XHTML 1.0 Transitional. Per specificare se ASP.NET eseguirà il rendering del codice conforme agli standard XHTML, configurare l'Elemento xhtmlConformance (schema delle impostazioni ASP.NET) nel file Web.config per l'applicazione. Per ulteriori informazioni su ASP.NET e XHTML, vedere ASP.NET e XHTML. Per ulteriori informazioni sul ciclo di vita della pagina, vedere Cenni preliminari sul ciclo di vita di una pagina ASP.NET.
Utilizzo di un oggetto TextWriter personalizzato
Per impostazione predefinita, ASP.NET utilizza l'oggetto TextWriter appropriato per il dispositivo richiedente. Se si necessita di maggiore controllo su TextWriter, è possibile utilizzare una classe esistente che eredita dalla classe HtmlTextWriter oppure creare un writer di testo personalizzato.
Le due classi XhtmlTextWriter e ChtmlTextWriter del framework della pagina ASP.NET ereditano rispettivamente dalle classi HtmlTextWriter e Html32TextWriter. Le classi XhtmlTextWriter e ChtmlTextWriter forniscono funzionalità di rendering adattivo aggiuntive. Di seguito è riportato un esempio:
La classe XhtmlTextWriter si rivela utile per il rendering di codice XHTML su dispositivi mobili e fornisce metodi per la personalizzazione degli attributi degli elementi XHTML di cui viene eseguito il rendering.
La classe ChtmlTextWriter si rivela utile per il rendering di cHTML (compact HTML) su dispositivi con memoria e potenza di CPU limitate, nonché con schermi di visualizzazione ridotti, funzionalità di formattazione limitate e una quantità ridotta di opzioni di input, come il touch pad di un telefono cellulare.
Se si crea un writer di testo personalizzato o si desidera specificare un determinato writer di testo per il rendering dell'output per un dispositivo specifico, è necessario associare il writer di testo al dispositivo con l'attributo markupTextWriterType dell'elemento controlAdapters in un file con estensione browser per l'applicazione.
Applicazione di filtri di periferica
L'applicazione di filtri di periferica consente di personalizzare gli aspetti del rendering dell'output per una proprietà di un controllo server Web. È possibile applicare filtri a proprietà dei controlli, attributi personalizzati e modelli. È inoltre possibile utilizzare filtri di periferica su alcuni attributi per le direttive @ Page e @ Control. Se per una proprietà o un attributo vengono specificati più filtri di periferica, il filtro più specifico avrà la precedenza.
- Le definizioni di filtri di periferica utilizzate per filtrare l'output sono basate sulla definizione dei tipi di browser nell'applicazione. I file di definizione dei browser predefiniti risiedono nella directory %SystemRoot%\Microsoft.NET\Framework\versionNumber\CONFIG\Browsers. I file di definizione dei browser specificati nella cartella App_Browsers per l'applicazione verranno uniti ai file di definizione predefiniti.
Per ulteriori informazioni sull'applicazione di filtri di periferica, vedere Cenni preliminari sul filtro di periferica ASP.NET. Per ulteriori informazioni sul formato di file browser, vedere Schema del file di definizione del browser (elemento browsers).
Adattatori di controllo
Cenni preliminari
Per la personalizzazione del comportamento per una pagina o un controllo, ASP.NET consente di specificare un oggetto ControlAdapter in grado di adattare o modificare il comportamento in determinati punti chiave del ciclo di vita del controllo. In ogni fase del ciclo di vita in cui viene eseguita la chiamata a un relativo metodo, il framework della pagina ASP.NET verifica la presenza di un adattatore associato per il controllo e chiama il metodo associato dell'adattatore anziché il metodo del controllo. In molti casi, il metodo dell'adattatore rimanda semplicemente al metodo del controllo. Un'eccezione a questo comportamento è rappresentata dagli adattatori per la gestione dello stato, poiché il comportamento adattivo è additivo rispetto allo stato del controllo.
L'override del comportamento per un controllo con un adattatore di controllo può rivelarsi opportuno nelle seguenti situazioni:
Per fornire un'elaborazione specifica della destinazione durante una determinata fase del ciclo di vita del controllo.
È ad esempio possibile utilizzare il metodo OnInit della classe ControlAdapter per completare attività di inizializzazione specifiche del controllo a cui l'adattatore è associato e del dispositivo di destinazione su cui viene eseguito il rendering del controllo.
Per personalizzare il rendering specifico della destinazione.
È ad esempio possibile utilizzare i metodi Render e RenderChildren per generare codice specifico della destinazione.
Controlli WebControlAdapter e PageAdapter
La classe ControlAdapter è una classe astratta che definisce le funzionalità di base per tutti gli adattatori e funge da classe base per le classi WebControlAdapter e PageAdapter.
La classe WebControlAdapter costituisce il punto di partenza per il rendering dei controlli che ereditano in modo adattivo dalla classe WebControl. Oltre ai metodi della classe ControlAdapter, la classe WebControlAdapter fornisce diversi metodi aggiuntivi specifici del rendering di tag.
La classe astratta PageAdapter costituisce il punto di partenza per il rendering adattivo di una pagina Web.
La classe PageAdapter definisce inoltre proprietà e metodi che consentono il rendering adattivo nel contesto di attività tipiche a livello di pagina, come la memorizzazione nella cache o la gestione della persistenza dello stato della pagina. Oltre a memorizzare pagine nella cache in base a parametri indipendenti dalla destinazione, ad esempio, può essere necessario eseguire la memorizzazione nella cache in base al tipo di browser di destinazione. In questo scenario, si eseguirà l'override della proprietà CacheVaryByParams della classe PageAdapter in modo da restituire un elenco di parametri GET o POST aggiuntivi in grado di controllare la memorizzazione nella cache specifica della destinazione.
Analogamente a writer di testo personalizzati, per essere riconosciuti dal framework della pagina ASP.NET gli adattatori di controllo personalizzati devono essere definiti nell'elemento controlAdapters del file con estensione browser per l'applicazione. Per ulteriori informazioni sul formato di file browser, vedere Schema del file di definizione del browser (elemento browsers).
I modelli di progettazione per la creazione di adattatori includono le seguenti linee guida:
Un controllo che eredita dalla classe Control dovrà disporre di un adattatore che eredita dalla classe ControlAdapter.
Un controllo che eredita dalla classe WebControl dovrà disporre di un adattatore che eredita dalla classe WebControlAdapter.
Gli sviluppatori che creano controlli personalizzati che devono estendere le funzionalità dell'adattatore dovranno creare adattatori di classe base per i controlli.
Vedere anche
Concetti
Cenni preliminari sul ciclo di vita di una pagina ASP.NET
Cenni preliminari sul filtro di periferica ASP.NET
Riferimenti
Elemento xhtmlConformance (schema delle impostazioni ASP.NET)
Schema del file di definizione del browser (elemento browsers)