Siti multilingua con le Master Page

di: Francesco Camarlinghi     11 Giugno 2008

In un precedente tutorial ci siamo occupati della localizzazione delle nostre pagine tramite i file di risorsa, speciali contenitori in cui memorizzare coppie di valori. Abbiamo poi visto diversi sistemi per accedere a questi file da ASP.NET realizzando una semplice pagina di esempio e implementando un meccanismo per cambiare la lingua della pagina a seconda della selezione dell'utente.

In questo articolo invece vediamo come modificare questo meccanismo per renderlo compatibile con le master page, particolari controlli di ASP.NET pensati per contenere elementi che con molta probabilità si ripeteranno su più pagine.

Master Page: un caso particolare

Nel tutorial avevamo utilizzato il seguente sistema per recuperare la lingua scelta dall'utente:

string culture = Request.Form["DropDownList1"];

La lingua viene estratta dalla collection Request.Form ed in particolare dal valore di un controllo DropDownList dichiarato come segue:

<asp:DropDownList ID="DropDownList1" runat="server">
  <asp:ListItem Value="default">Default</asp:ListItem>
  <asp:ListItem Value="it-IT">it-IT</asp:ListItem>
</asp:DropDownList>

Questo sistema si basa sul fatto che l'ID HTML del controllo, se posizionato direttamente all'interno della pagina, rimarrà DropDownList1. Se però proviamo ad aggiungere una master page ed a posizionare di conseguenza il menu a discesa all'interno di un controllo Content, l'ID risultante sarà qualcosa di simile a:

ctl00_ContentPlaceHolder1_DropDownList1

Visto che la chiamata alla funzione InitializeCulture, che si occupa di caricare la lingua per la pagina, viene effettuata molto prima che i controlli siano inizializzati non possiamo ricorrere neanche alla proprietà Control.ClientID che normalmente può essere utilizzata per accedere da codice all'ID HTML dei nostri controlli: é quindi necessario cambiare approccio per risolvere il problema.

La soluzione consiste nel cambiare la lingua all'interno dell'evento SelectedIndexChanged generato dal controllo DropDownList quando l'utente cambia la selezione:

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
  string culture = DropDownList1.SelectedValue;

  Session["Culture"] = new CultureInfo(culture);
  Session["UICulture"] = new CultureInfo(culture);

  Server.Transfer(Request.Path);
}

Per prima cosa recuperiamo il valore selezionato dalla proprietà SelectedValue della DropDownList e poi salviamo l'oggetto Culture corrispondente in una variabile di sessione. Questo si rende necessario, come pure l'istruzione Server.Transfer successiva, a causa del ciclo di vita della pagina ASP.NET.

Guide ASP.Net

Guida Windows Azure Code Snippets

Le migliori pratiche per far girare le applicazioni "in the cloud",...

Guida ASP.NET MVC Best Practices

Un workflow dettagliato e ricco di suggerimenti pratici per...

Guida ASP.NET Starter Kit

Un modo semplice per imparare ad utilizzare le tecnologie Microsoft...

Altre guide

Newsletter @Microsoft Dev

Ogni giovedì, direttamente nella tua e-mail: articoli, guide, tutorial e script ASP, ASP.Net, SQL server e IIS.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso Progettazione database

11 Maggio 2012 a Milano
Disponibilità: 6 Posti

Amministratore di Reti Windows Server 2008

11 Giugno 2012 a Milano
Disponibilità: 5 Posti

Nessun corso previsto