Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Temi e profili utente

Associare all'utente un tema e fare in modo che l'applicazione ricordi la preferenza
Associare all'utente un tema e fare in modo che l'applicazione ricordi la preferenza
Link copiato negli appunti

Come abbiamo visto nella guida ASP.NET 2.0, temi e skin servono per definire l'interfaccia utente di un'applicazione ASP.NET 2.0. Il nome che diamo ad un tema corrisponde al nome della cartella che lo ospita, che è contenuta nella cartella speciale App_Themes. Poiché questa è una relazione uno ad uno, possiamo affermare per semplicità che i temi sono cartelle contenute nella cartella App_Themes.

Ogni tema è costituito da uno o più file skin, cioè file con estensione .skin, che contengono la definizione del look di uno o più controlli server ASP.NET 2.0.

Per impostare un tema in una pagina web possiamo agire nel pannello delle Properties della direttiva <Page> impostano la proprietà Theme. Se non disponiamo di un ambiente di sviluppo, come il VWD, che ci consente di accedere al pannello delle Properties, possiamo scrivere a mano Theme="NomeTema" nella direttiva <Page> della pagina.

Un altra possibilità per impostare un tema è farlo nel file di configurazione dell'applicazione inserendo la sezione <pages theme = "NomeTema" /> all'interno di <system.web>. In questo caso però tutte le pagine dell'applicazione utilizzeranno quel tema a meno che non venga reimpostato sulla singola direttiva <Page> della pagina.

Nella Guida abbiamo anche visto come si può impostare un tema dinamicamente, facendo in modo che l'utente lo possa scegliere da una lista di possibilità.

Quando un utente di un sito web accede per la prima volta e sceglie un tema da applicare, sarebbe bello, che il sito si ricordasse il tema che ha scelto e, al prossimo accesso, glielo applicasse in automatico.

Per fare questo possiamo utilizzare l'oggetto Profile ed immagazzinare il tema scelto in una sua proprietà.

Realizziamo ora un esempio partendo da quello realizzato nell'articolo "Convertire utenti anonimi in utenti dell'applicazione" che possiamo scaricare da qui.

Rinominiamo l'esempio scaricato: "TemaSulProfilo".

La prima cosa da fare è aggiungere la proprietà Tema alla sezione <profile> del Web.config. Specifichiamo inoltre che il Tema venga memorizzato anche per gli utenti anonimi:

Listato 1. Proprietà Tema sul Web.config

<?xml version="1.0"?>
<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
  <compilation debug="true"/>
  <authentication mode="Forms"/>
  <anonymousIdentification enabled="true"/>
  <profile>
    <properties>
      <add name="Nome"/>
      <add name="Cognome"/>
      <add name="Tema" allowanonymous="true"/>
      <add name="UltimoCollegamento" type="System.DateTime"/>
      <add name="Carrello" allowAnonymous="true" type="Carrello" serializeAs="Xml"/>
      <group name="Indirizzo">
        <add name="Via"/>
        <add name="Numero"/>
        <add name="Nazione"/>
        <add name="CAP"/>
      </group>
    </properties>
  </profile>
</system.web>
</configuration>

Nel nostro esempio, quando l'utente anonimo andrà sulla pagina dei prodotti, potrà scegliere il Tema da applicare alla pagina, oltre agli articoli da acquistare. 

Nella pagina Prodotti.aspx aggiungiamo una DropDownList (DropDownList1Tema) che mostri i temi disponibili e dia la possibilità di applicarli.

Lo abbiamo già fatto nella Guida ASP.NET 2.0, si tratta di popolare dinamicamente la DropDownList.

Aggiungiamo quindi qualche riga di codice nella Prodotti.aspx.cs:

Listato 2. Codice da inserire nel Page_Load per popolare dinamicamente la DropDownList

if (!Page.IsPostBack)
{
  string[] temi = System.IO.Directory.GetDirectories(Request.PhysicalApplicationPath + "App_Themes");
  DropDownList1Tema.Items.Clear();
  DropDownList1Tema.Items.Add("Seleziona il tema");
  
  foreach (string tema in temi)
    DropDownList1Tema.Items.Add(tema.Substring(tema.LastIndexOf("") + 1));
  
  if (Profile.Tema != "")
    DropDownList1Tema.SelectedValue = Profile.Tema;
}

Abilitiamo l'AutoPostBack nella DropDownList.

Sul Global.asax dobbiamo gestire anche il trasferimento del Tema da un profilo anonimo ad un profilo autenticato:

Listato 3. Codice da inserire sul Profile_OnMigrateAnonymous del Global.asax

void Profile_OnMigrateAnonymous(object sender, ProfileMigrateEventArgs args)
{
  // otteniamo il profilo dell'utente anonimo
  ProfileCommon anonymousProfile = Profile.GetProfile(args.AnonymousID);
  // trasferiamo il carrello
  // se vogliamo che il carrello non venga aggiornato ad ogni Login:
  //if (anonymousProfile.Carrello.articoli.Count != 0)
  Profile.Carrello = anonymousProfile.Carrello;
  
  // trasferiamo il Tema
  if (anonymousProfile.Tema != "")
    Profile.Tema = anonymousProfile.Tema;

  
  // cancelliamo il profilo anonimo
  ProfileManager.DeleteProfile(args.AnonymousID);
  // cancelliamo l'utente anonimo dal database
  Membership.DeleteUser(args.AnonymousID);
  // cancelliamo il cookie dell'utente anonimo
  AnonymousIdentificationModule.ClearAnonymousIdentifier();
}

Nel Profile_OnMigrateAnonymous trasferiamo il Tema solo se l'utente anonimo ha effettuato una scelta.

Notiamo dal codice che il Carrello viene aggiornato ad ogni Login, se vogliamo mantenerne i dati dobbiamo evitarne il trasferimento ad ogni Login, aggiungendo la riga commentata.

Come già sappiamo, avendo letto la Guida, il codice per impostare il Tema della pagina va inserito nel gestore Page_PreInit:

Listato 4. Codifica di Page_PreInit in Prodotti.aspx.cs

protected void Page_PreInit(object sender, EventArgs e)
{
  string tema = Request["DropDownList1Tema"];
  if (tema == null && Profile.Tema != "")
    Page.Theme = Profile.Tema;

  if (tema != null)
  {
    if (tema != "Seleziona il tema")
      Page.Theme = tema;
    Profile.Tema = Page.Theme;
  }
}

In Page_PreInit gestiamo l'impostazione del Tema della pagina, leggendolo dal profilo o dalla DropDownList, ed impostiamo il Tema sul profilo se è stata operata una scelta sulla DropDownList.

A questo punto non ci resta che definire almeno due Temi per la nostra applicazione, ad esempio i Temi: Caldo e Freddo.

Figura 1. I Temi Caldo e Freddo
I Temi Caldo e Freddo

Nell'esempio di figura 1, ogni "Tema" è definito mediante i file .skin dei controlli server presenti nella pagina o solo di alcuni di essi. Ad ogni tema è inoltre associato uno "Stile.css" per definire l'aspetto di elementi HTML.

Effettuiamo ora un test per verificare che il tema venga memorizzato nel profilo dell'utente. Selezioniamo la Login.aspx e premiamo F5.

Entriamo con l'utente Pippo ed andiamo sulla pagina Prodotti.aspx.

Qui, mediante la DropDownList, selezioniamo il tema "Caldo". Otteniamo:

Figura 2. Test
Test

Ora usciamo dall'applicazione chiudendo il browser. Rientriamo sulla Login.aspx. Effettuiamo il Login con lo stesso utente, e verifichiamo che il tema scelto la volta scorsa è tuttora impostato.

Verifichiamo poi che, entrando con l'utente anonimo direttamente sulla Prodotti.aspx, funzioni tutto correttamente. Cioè che anche l'utente anonimo possa scegliere un tema e che, se si autentifica, il tema scelto venga trasferito al suo profilo di utente autenticato.

L'esempio sviluppato in questo articolo, senza il database per motivi di spazio, può essere scaricato da qui.

Ti consigliamo anche