Procedura: fare riferimento a contenuto di pagine master ASP.NET
Aggiornamento: novembre 2007
Nelle pagine di contenuto è possibile scrivere codice che faccia riferimento a proprietà, metodi e controlli nella pagina master. Esistono però alcune limitazioni. È possibile fare riferimento ai metodi e alle proprietà se questi sono dichiarati come membri pubblici della pagina master, inclusi i metodi pubblici e le proprietà pubbliche. È possibile fare riferimento ai controlli nella pagina master indipendentemente dai membri pubblici.
Per fare riferimento a un membro pubblico nella pagina master
Aggiungere una direttiva @ MasterType nella pagina di contenuto. Nella direttiva impostare l'attributo VirtualPath sul percorso della pagina master, come nel seguente esempio:
<%@ MasterType virtualpath="~/Masters/Master1.master" %>
Questa direttiva fa sì che la proprietà Master della pagina di contenuto sia fortemente tipizzata.
Scrivere codice che utilizza il membro pubblico della pagina master come membro della proprietà Master, come nell'esempio che segue, in cui viene assegnato il valore di una proprietà pubblica denominata CompanyName della pagina master a una casella di testo presente nella pagina di contenuto:
CompanyName.Text = Master.CompanyName
CompanyName.Text = Master.CompanyName;
Per fare riferimento a un controllo nella pagina master
Utilizzare il metodo FindControl, specificando il valore restituito dalla proprietà Master come contenitore dei nomi.
Nell'esempio di codice riportato di seguito viene illustrato come utilizzare il metodo FindControl per ottenere un riferimento a due controlli nella pagina master, ovvero TextBox e Label. Poiché il controllo TextBox si trova all'interno di un controllo ContentPlaceHolder, è necessario innanzitutto ottenere un riferimento a ContentPlaceHolder e quindi utilizzare il metodo FindControl per individuare il controllo TextBox.
Sub Page_Load() Dim mpContentPlaceHolder As ContentPlaceHolder Dim mpTextBox As TextBox mpContentPlaceHolder = _ CType(Master.FindControl("ContentPlaceHolder1"), _ ContentPlaceHolder) If Not mpContentPlaceHolder Is Nothing Then mpTextBox = CType(mpContentPlaceHolder. _ FindControl("TextBox1"), TextBox) If Not mpTextBox Is Nothing Then mpTextBox.Text = "TextBox found!" End If End If ' Gets a reference to a Label control not in a ' ContentPlaceHolder Dim mpLabel As Label mpLabel = CType(Master.FindControl("masterPageLabel"), Label) If Not mpLabel Is Nothing Then Label1.Text = "Master page label = " + mpLabel.Text End If End Sub
void Page_Load() { // Gets a reference to a TextBox control inside // a ContentPlaceHolder ContentPlaceHolder mpContentPlaceHolder; TextBox mpTextBox; mpContentPlaceHolder = (ContentPlaceHolder)Master.FindControl("ContentPlaceHolder1"); if(mpContentPlaceHolder != null) { mpTextBox = (TextBox) mpContentPlaceHolder.FindControl("TextBox1"); if(mpTextBox != null) { mpTextBox.Text = "TextBox found!"; } } // Gets a reference to a Label control that not in // a ContentPlaceHolder Label mpLabel = (Label) Master.FindControl("masterPageLabel"); if(mpLabel != null) { Label1.Text = "Master page label = " + mpLabel.Text; } }
Vedere anche
Concetti
Informazioni generali sulle pagine master ASP.NET
Utilizzo di pagine master di ASP.NET a livello di codice