Rendering specifico di dispositivo

Sebbene sia possibile eseguire il rendering automatico delle pagine Web Form mobili di ASP.NET su dispositivi diversi, tali pagine includono vari sistemi che consentono di indicare contenuti specifici per un dispositivo o una classe di dispositivi. Le pagine Web Form mobili consentono quindi allo sviluppatore di eseguire personalizzazioni grazie alle quali è possibile sfruttare al meglio le particolari funzioni di un dispositivo. Un comune requisito di implementazione, ad esempio, è quello di eseguire esplicitamente il rendering di alcuni elementi in maniera differente su dispositivi diversi. ASP.NET consente di gestire molte caratteristiche di formattazione implicite appropriate all'esecuzione del rendering in una vasta gamma di tipi di dispositivi. Lo sviluppatore deve tuttavia compiere un lavoro specifico affinché in ASP.NET sia possibile definire una stringa come etichetta in un dispositivo e una stringa differente come etichetta su un altro dispositivo.

Per gestire situazioni di questo tipo, il codice incluso nelle applicazioni deve consentire l'impostazione delle proprietà dei controlli in base ai risultati delle query sulle funzionalità dei dispositivi. Per personalizzare un'applicazione Web Form per tipi specifici di dispositivi, è necessario definire un insieme di filtri di dispositivo per l'applicazione e quindi specificare il filtro per ogni singolo tipo di dispositivo in un costrutto <DeviceSpecific><Choice>.

Uso della proprietà Filter

Utilizzare la proprietà Filter per valutare i filtri di dispositivo rispetto alle funzionalità del dispositivo, oppure impostare filtri specifici.

Il nome del filtro deve essere il nome di un metodo incluso nella pagina, il file ASCX associato o il nome di un filtro di dispositivo valido definito nella sezione <deviceFilters> del file Web.config. Se il nome del metodo viene specificato nella proprietà Filter, tale metodo deve corrispondere al prototipo indicato di seguito.

public bool methodName(System.Web.Mobile.MobileCapabilities capabilities,
   String optionalArgument)

Se la proprietà Filter, ad esempio, è impostata su myChoiceMethod, deve esistere un metodo con la firma che segue.

public bool myChoiceMethod(
   System.Web.Mobile.MobileCapabilities capabilities, 
   String optionalArgument
);

Quando ASP.NET valuta l'elemento <Choice>, controlla se nella pagina o nel controllo utente esiste un metodo della firma appropriata. Se il metodo non esiste, viene controllata la sezione <deviceFilters> del file Web.config.

Uso dei filtri di dispositivo per estendere la classe MobileCapabilities

I filtri di dispositivo vengono aggiunti alla relativa sezione di configurazione nel file Web.config. Aggiungendo i filtri di dispositivo personalizzati in questa sezione di configurazione è possibile estendere la classe MobileCapabilities. La configurazione dei filtri di dispositivo rappresenta un meccanismo di valutazione per due tipi di filtri, un filtro basato sul confronto e un filtro basato sul delegato di valutazione.

Filtri basati sul confronto

Il filtro basato sul confronto consente di eseguire confronti di base, in genere basati su un argomento booleano. Per questo tipo di filtro è necessario fornire il nome di una funzionalità e il valore con il quale il filtro eseguirà il confronto. In fase di esecuzione, il filtro restituisce un risultato positivo se il valore della funzionalità e il valore fornito sono uguali. Le proprietà booleane vengono confrontante senza distinzione tra maiuscole e minuscole, pertanto true e True sono considerati uguali. Le altre proprietà vengono confrontate rispettando le maiuscole e le minuscole.

Filtri basati su delegati di valutazione

Per eseguire una valutazione più complessa, è possibile specificare un filtro basato su delegati di valutazione, fornendo la classe e il nome di un metodo. In fase di esecuzione, il metodo fornito viene chiamato per verificare il delegato di valutazione. È necessario scrivere e compilare un metodo personalizzato per eseguire il test del delegato di valutazione. In alternativa, è possibile definire un metodo nella pagina o nel controllo utente e fare riferimento a tale metodo direttamente dall'attributo filter, come descritto in precedenza.

Sintassi del file Web.Config

Per specificare i filtri di dispositivo nel file di configurazione, aggiungere tali filtri alla sezione System.Web del file. Per visualizzare la sintassi, vedere l'elemento <deviceFilters>. Nella sintassi vengono specificati entrambi i tipi di filtri. Il primo filtro indica il filtro basato sul confronto, il secondo indica il filtro basato su delegati di valutazione. Nel codice seguente viene mostrata una sintassi che può essere utilizzata dall'utente.

<system.web>
    <deviceFilters>
        <filter
            name="capability"
            compare="capabilityName"
            argument="argument" />
        <filter
            name="capability"
            type="className"
            method="methodName" />
    </deviceFilters>
</system.web>

L'oggetto MobileCapabilities valuta questi filtri in fase di esecuzione. Ogni filtro di dispositivo consente di specificare una condizione di valutazione basata sulle funzionalità del dispositivo. Gli insiemi di dispositivi di destinazione dei filtri di dispositivi non sono in genere insiemi discreti; ad esempio, molti dispositivi possono corrispondere sia al filtro IsColor che al filtro IsPDA.

Nota   I nomi dei filtri di dispositivo distinguono tra lettere maiuscole e minuscole.

Nel costrutto <DeviceSpecific><Choice>, vengono specificati i valori per tali filtri. Il codice seguente, ad esempio, consente di accedere al filtro IsColor definito nel file Web.config.

<DeviceSpecific>
    <Choice Filter="IsColor" ImageUrl="colorImg.gif"/>
</DeviceSpecific>

Uso del costrutto Device-Specific/Choice

L'elemento <DeviceSpecific> rappresenta il contenitore più esterno per gli elementi <Choice>. Il costrutto <DeviceSpecific><Choice> rappresenta il costrutto principale per inserire in una pagina tag specifici di dispositivo. Per aggiungere tag specifici di dispositivo a un controllo, inserire l'elemento <DeviceSpecific> come elemento figlio del controllo. In un controllo può essere incluso un solo elemento <DeviceSpecific>.

  • L'elemento <DeviceSpecific> e l'elemento <Choice> consentono di specificare un insieme di valori tra i quali ASP.NET eseguirà una scelta, in base alle caratteristiche del dispositivo di destinazione in arrivo. I valori delle opzioni sono rappresentati da stringhe.

Il controllo <DeviceSpecific> è un semplice contenitore esterno nel quale includere una serie di opzioni, come illustrato nell'esempio seguente.

<mobile:Image runat=server ImageURL="bw.gif">
    <DeviceSpecific>
      <Choice Filter="isColor" ImageURL="colorImg.gif"
        AlternateText="This device cannot display the requested image." />
      <Choice Filter="isWML11" ImageURL="myImage.wbmp"/>
      <Choice ImageURL="monoImage.gif"/>
    </DeviceSpecific>
</mobile:Image>

I filtri quali isColor devono avere voci corrispondenti nel file Web.config, oppure devono esistere sotto forma di metodi nella pagina o nel controllo utente, come descritto in precedenza.

Uso dell'elemento Choice

Le opzioni vengono inserite in un elemento <DeviceSpecific> e rappresentano coppie composte da caratteristica/valore del dispositivo; la caratteristica del dispositivo viene tracciata da varie origini, a loro volta valutate in base all'ordine di visualizzazione nel costrutto DeviceSpecific/Choice.

Sebbene in un controllo possa essere incluso un solo elemento <DeviceSpecific>, è possibile aggiungere un numero qualsiasi di elementi <Choice> a un elemento <DeviceSpecific>. In ogni elemento <Choice> può essere incluso quanto indicato di seguito.

  • Un nome filtro, che specifica il filtro di dispositivo da valutare. Se il nome filtro viene omesso, viene prelevato l'elemento Choice predefinito.
  • Proprietà aggiuntive che eseguono l'override delle proprietà del controllo padre.
  • Definizioni dei modelli per il controllo.

L'elemento <Choice> da utilizzare viene scelto scorrendo in ordine ogni opzione specificata e valutando il filtro definito dal nome filtro. Se il filtro corrisponde al dispositivo di destinazione corrente (ovvero se viene restituito il valore true), l'opzione viene prelevata. Il controllo applica quindi qualunque override di proprietà specificato nell'opzione e può utilizzare qualunque modello definito durante l'esecuzione del rendering.