ASP.NET: accedere a un controllo presente su una MasterPage da una ContentPage



aspnet.pngChi sviluppa in ASP.NET si sara' sicuramente accorto di quanto sia importante tenere bene a mente il ciclo di vita di una pagina: durante la creazione delle pagina stessa si susseguono una serie di eventi in un ordine ben definito, e tutto va realizzato proprio nel rispetto di tale ordine.

Nel caso la nostra applicazioni utilizzi le MasterPages la faccenda si complica un pochino, e benche' sia possibile includere codice nella MasterPage spesso ci si trova nella situazione di dover agire dal codice presente su una ContentPage su un controllo presente invece nella pagina Master.

La procedura che utilizzo di solito ' riassunta in questo esempio:
[sourcecode language='vb']
Dim MP_TextBox As TextBox = CType(Page.Master.FindControl("TextBoxMaster"), TextBox)
MP_TextBox.Text = "TESTO"[/sourcecode]
Il funzionamento e' presto spiegato: tramite la funzione FindControl mi ricavo una istanza del controllo di tipo TextBox presente sulla masterPage.
Tale istanza mi viene restituita come oggetto 'grezzo', quindi ne effettuo il cast in un oggetto TextBox utilizzando CType. A questo punto posso accedere tranquillamente al controllo.Tale procedura puo' essere utilizzata anche per metter mano sulla MasterPage a controlli non strettamente legati al framework.
Un esempio puo' essere quello di modificare il background del body (dichiarato quindi nella MP).
Per prima cosa e' necessario dichiarare il body della MP come runat="server", e assegnargli un ID:
[sourcecode language='html']



[/sourcecode]
in seguito, dalla content page il codice sara' il seguente:
[sourcecode language='vb']

Dim MP_Body As System.Web.UI.HtmlControls.HtmlGenericControl = CType(Page.Master.FindControl("bodyMaster"), System.Web.UI.HtmlControls.HtmlGenericControl)
MP_Body.Attributes("bgcolor") = "red"[/sourcecode]
Ovviamente, dell'oggetto ottenuto tramite FindControl andra' effettuato il casting in HtmlGenericControl.

Published: February 06 2008

  • category: