Accedere da una Content Page ad un controllo sulla Master Page

giovedì 07 gennaio 2010 - 18.58

motogpdesmo16 Profilo | Senior Member

Buonasera,
ho un problema un po' particolare nell'accedere ad alcuni controlli presenti nelle master page a partire da una content page.

Ho creato una master page che chiamerò MasterPageA nella quale sono presenti alcuni controlli (hyperlink ad esempio)
Ho creato una seconda master page, MasterPageB, la cui masterpage è MasterPageA, nella quale sono presenti altri controlli (Datalist).

Infine ho provveduto a creare due pagine: Default1.aspx, figlia di MasterPageA e Default2.aspx, figlia di MasterPageB.
Se in Default1.aspx.vb scrivo il consueto codice per l'accesso ai controlli della Mp (http://msdn.microsoft.com/en-us/library/xxwa0ff0(VS.80).aspx) non ho nessun tipo di problema.
Riportando lo stesso codice nella Default2.aspx.vb e, facendo attenzione ad effettuare prima il cast del content(N.b.: il mio controllo si trova nel content e non nel ContentPlaceHolder) e poi del controllo al quale intendo accedere, non ottengo nessun risultato. Sin dal findcontrol inerente il content, ottengo Nothing.

Riporto brevemente il codice:
MasterPageA.aspx
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


MasterPageB.aspx
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Default2.aspx.vb (figlia di MasterPageB.aspx)
Dim oContent As Content, oLabel as Label oContent = CType(Master.FindControl("Content1"), Content) If Not oContent Is Nothing Then oLabel = CType(oContent.FindControl("lblContatti"), Label) Endif
N.B.: nell'istruzione Master.FindControl ho provato anche ad inserire "ContentPlaceHolder1" anzichè "Content1", ma non ottengo nessun risultato.

Sapreste come aiutarmi?
Grazie

FrancescoGuadagno Profilo | Senior Member


Credo tu debba fare un Cast sul tipo della MasterPage, prima di fare la findcontrol. Non uso Vb ma dovrebbe essere qualcosa tipo

oContent = CType( CType(Master, MasterPageA).FindControl("Content1"), Content)

Non sono sicuro della sintassi però...

motogpdesmo16 Profilo | Senior Member

un CType(Master,MasterPageA) non credo sia contemplato perchè di fatto MasterPageA non è un tipo ma solo il nome della mia pagina.
Tra le altre prove che ho fatto:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
Ho dunque effettuato la prova ad andare ad un livello ancora superiore (ContentPlaceHolder1) e poi ad entrare nel content della Master Page derivata da esso. La prova è stata ovviamente senza successo perchè in oInner_CPH ho ancora valore Nothing.

FrancescoGuadagno Profilo | Senior Member

>un CType(Master,MasterPageA) non credo sia contemplato perchè
>di fatto MasterPageA non è un tipo ma solo il nome della mia
>pagina.

non è corretto. MasterPageA è il nome della classe. Quindi più correttamente devi fare unboxing dalla classe base MasterPage.

In C#, dalla pagina content

Button btnTofind = ((Button)((MasterPageA)Master).FindControl("btnInMaster"));

questa modalità consente di trovare nella pagina Master (di tipo MasterPageA) un controllo btnInMaster.



Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5