Cambiare il markup generato da un Web Control con un Control Adapter

di Marco Leoncini, in UserScript, ASP.NET 2.0, Web Controls,

Nel ciclo di vita di una pagina il rendering del markup rappresenta sicuramente la parte più visibile all'utente finale. Nella versione 2.0 una nuova architettura dei controlli rende questa fase dipendente dal client, sfruttando il cosiddetto Adaptive Rendering.

Ad ogni richiesta del browser, ASP.NET accede alla proprietà Adapter del WebControl, recupera l'oggetto HttpBrowserCapabilities e carica l'Adapter specificato.

Una volta recuperato l'Adapter, i suoi metodi, proprietà ed eventi parteciperanno nel ciclo di vita del Web Control sostituendoli e modificandone di fatto il comportamento e l'aspetto in base alla tipologia di browser.

Per creare un Adapter è necessario estendere la classe ControlAdapter o WebControlAdapter:

public class DropDownListFxAdapter : WebControlAdapter{}

E poi eseguire l'override dei metodi interesati:

public class DropDownListFxAdapter : WebControlAdapter
{
  protected override void Render(HtmlTextWriter writer)
  {
    // logica di rendering
    RenderBeginTag(writer);
    RenderInput(writer);
    RenderHiddenTextBox(writer);
    RenderButton(writer);
    RenderRollOut(writer);
    RenderEndTag(writer);
  }
}

Nel codice allegato allo script, viene realizzato un WebControlAdpter per modificare il Markup del control DropDownList, che non sarà più renderizzato con il tag Select, ma con un insieme di tag il cui aspetto è completamente determinato tramite CSS.

Al fine di utilizzare l'Adapter ed associarlo al control, è necessario aggiungere alla nostra applicazione una directory nominata App_Browsers, con un file con estensione .browser simile a questo:

<browsers>
  <browser refID="Default" >
    <controlAdapters>
       <adapter
                  controlType="System.Web.UI.WebControls.DropDownList"
             adapterType="AspItalia.AdapterFx.DropDownListFxAdapter" />
    </controlAdapters>
  </browser>
</browsers>

Senza scendere troppo in dettaglio, attraverso refID specifichiamo l'utilizzo dell'adapter per ogni browser, salvo che non sia specificato diversamente per particolari client, in quanto la struttura di configurazione della definizione del browser ricalca il funzionamento di quella più nota del web.config.

Realizzare un adapter rispetto ad implementare ex novo un control ha diversi vantaggi, primo fra tutti la possibilità di abilitarlo solo per alcuni client e semplicemente modificando un file di configurazione.
Lo svantaggio è che non è possibile aggiungere nuove proprietà o metodi al controllo, ma se si tratta di alterarne il comportamento o l'aspetto, realizzare un Adapter è sicuramente una valida alternativa a creare oggetti derivati.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi