Visualizzare un template per browser mobile tramite un custom control ASP.NET

  1. Alessio Arrigoni
  2. Blog
  3. Visualizzare un template per browser mobile tramite un custom control ASP.NET
Quando dobbiamo sviluppare siti ottimizzati per mobile con ASP.NET, una delle possibilità che abbiamo è quella di adattare il contenuto delle nostre pagine, in modo che siano correttamente visualizzate quando visitate da uno smartphone.

Se le media query di CSS non bastano, perchè vogliamo modificare anche radicalmente il contenuto della pagina, tipicamente agiamo a livello di server control, rendendo visibili alcune porzioni della pagina piuttosto di altre, a seconda della tipologia del browser. In questo contesto, risulta molto comodo avvalersi di un controllo che ci permetta di specificare due distinti template, uno standard e uno mobile, visualizzando poi quello più opportuno:

<ucalessioarrigoni:MobileView runat="server" ID="mv">
    <MobileTemplate>
        <asp:Label runat="server" ID="lblMobile" Text="Hi from mobile" />
    </MobileTemplate>
    <StandardTemplate>
        <asp:Label runat="server" ID="lblStandard" Text="Hi from standard" />
    </StandardTemplate>
</ucalessioarrigoni:MobileView>

Realizzare un controllo di questo tipo è solo questione di creare una classe MobileView che erediti da WebControl ed esponga due proprietà MobileTemplate e StandardTemplate, di tipo ITemplate:

public class MobileView : WebControl, INamingContainer {
    [PersistenceMode(PersistenceMode.InnerProperty),
    Browsable(false), TemplateInstance(TemplateInstance.Single)]
    public ITemplate MobileTemplate { get; set; }

    [PersistenceMode(PersistenceMode.InnerProperty),
    Browsable(false), TemplateInstance(TemplateInstance.Single)]
    public ITemplate StandardTemplate { get; set; }
}

Ognuna di queste proprietà è marcata, tra gli altri, dall'attributo TemplateInstance impostato al valore Single. Questo fa sì che il designer crei i field relativi ai controlli contenuti nel template, così che possiamo referenziarli dal code-behind della pagina:

protected void Page_Load(object sender, EventArgs e) {
    this.lblMobile.Text = "Hi from mobile";
}

Internamente, il nostro controllo effettua l'override del metodo CreateChildControls, all'interno del quale istanziamo entrambi i template, ognuno all'interno di un Panel, visualizzando però solo quello corretto, a seconda delle BrowserCapability del nostro visitatore. Se invochiamo EnsureChildControls all'OnInit, siamo sicuri che siano istanziati e valorizzati per tutto il ciclo di vita della pagina:

protected override OnInit(EventArgs e) {
    base.OnInit(e);
    this.EnsureChildControls();
}

protected override void CreateChildControls() {
    base.CreateChildControls();

    Panel standardContainer = new Panel();
    this.StandardTemplate.InstantiateIn(standardContainer);

    Panel mobileContainer = new Panel();
    this.MobileTemplate.InstantiateIn(mobileContainer);
           
    if (this.Context.Request.Browser.IsMobileDevice) this.Controls.Add(mobileContainer);
    else this.Controls.Add(standardContainer);

}

Istanziando entrambi i template, siamo sicuri che tutti i Server Control in essi contenuti, siano essi appartenenti allo StandardTemplate o al MobileTemplate, vengano comunque creati, così che possiamo referenziarli in pagina senza effettuare controlli di sorta. Se non procedessimo in questo modo, quelli del template non visualizzato risulterebbero null, costringendoci quindi ad una serie di verifiche prima di poterli utilizzare, per non incorrere in NullReferenceException.

L'autore

Mi sono laureato in informatica presso l'università degli studi di Milano. Da sempre mi occupo di informatica e programmazione.
Da qualche anno sono diventato un blogger e collaboro con alcune testate on-line.
Ho al mio attivo anche alcune pubblicazioni on-line.

Ti potrebbe anche interessare

Leggi le ultima novità dal blog.

Come leggere o scrivere un database Access con php

Leggi tutto...
Si avete letto bene, "come leggere o scrivere un database access con php".Certo si sa che è un binomio inconsueto, perché solitamente con php si è soliti adottare come database mysql, ma su sistema op ...

Supportare IE11 in un'applicazione ASP.NET

Leggi tutto...
Con il rilascio di Windows 8.1, sarà rilasciato sul mercato anche IE 11. Questa nuova versione di Internet Explorer presenta diverse novità, che vanno verso la direzione di un supporto più esteso agli ...

Creare applicazioni Facebook in asp.net in modo semplice e veloce

Leggi tutto...
Eravamo alla ricerca di uno strumento che velocizzasse l’integrazione di componenti Facebook in siti sviluppati in asp.net e nella creazione di nuove applicazioni, ci siamo fortunatamente im ...

Intelligenza artificiale: i pro e i contro

Leggi tutto...
Tema molto dibattuto in questi ultimi tempi: l’intelligenza artificiale. Argomento di grande rilevanza nella società odierna, che suscita sia entusiasmo che preoccupazione. Da un lato, ...

Generare un Alert (Message Box) in ASP.NET

Leggi tutto...
Un articolo veloce per indicarvi la linea di codice ASP.NET C# per generare un Alert con un messaggio di testo dopo un Postback.Ecco il codice:ClientScript.RegisterClientScriptBlock(this.Get ...

Articoli recenti

Leggi le ultima novità dal blog.

Intelligenza artificiale: i pro e i contro

Leggi tutto...
Tema molto dibattuto in questi ultimi tempi: l’intelligenza artificiale. Argomento di grande rilevanza nella società odierna, che suscita sia entusiasmo che preoccupazione. Da un lato, ...

Cosa sono i dati basati su SSD ?

Leggi tutto...
Le SSD (acronimo di solid state drive, o unità di memoria a stato solido) sono delle unità di memoria particolarmente popolari nel mondo dei giocatori di videogiochi. Essendo i videogi ...

Perché utilizzare una VPN per l'accesso al cloud ?

Leggi tutto...
Il 2020 ha visto un enorme aumento del crimine informatico. Sebbene le persone non andassero in ufficio a causa delle preoccupazioni relative al COVID-19, molti si sono trovati inclini a maggiori ri ...

Errori comuni nell’archiviazione dei dati: quali sono e come evitarli ?

Leggi tutto...
Errori comuni nell’archiviazione dei dati: quali sono e come evitarli? Siamo nell’era digitale in cui di dati e le informazioni sul web sono una componente chiave di qualsiasi tipo di ...

Consigli sulla sicurezza: come il vostro computer potrebbe compromettersi nel momento peggiore

Leggi tutto...
La sicurezza del proprio dispositivo è oggi qualcosa a cui si deve prestare una particolare attenzione. La rete è invasa da sempre più pericoli, in grado di compromettere i vost ...

Scegliere una password sicura per qualsiasi account

Leggi tutto...
Al giorno d'oggi è estremamente facile subire un attacco ai propri account, specie se riguardano servizi bancari o postali o permettono di fare acquisti online. Per poter evitare che i ...