Ereditare dalla aspx controlli presenti in una master

sabato 30 dicembre 2006 - 15.48

Giovanni_3478 Profilo | Senior Member

Ciao

In VB ho una master e una aspx
Vorrei dalla aspx utilizzare controlli che sono presenti nella master.
Nel code-behind aspx.vb ad esempio vorrei poter scrivere:
(Panel1 è un cotrollo presente nella master)
if Panel1.visible then
response.write("ciao")
end if

Di logica "mi piacerebbe" ereditare dalla aspx.vb la pagina master
ma non può essere ereditata un'altra classe in aggiunta a System.Web.UI.Page.


C' un modo per ovviare questo problema?

freeteo Profilo | Guru

ciao,
praticamnete ti basta fare nella master le proprieta' per farti accedere ai controlli della stessa, pubbliche e quindi accessibili dalle pagine figlie.
Cmq prova a dare un'occhiata a questi 2 thread, parlano dello stesso argomento:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=9897
http://www.dotnethell.it/forum/messages.aspx?ThreadID=11944


ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

Giovanni_3478 Profilo | Senior Member

Auguri di buon anno!

freeteo Profilo | Guru

>Auguri di buon anno!
grazie auguri anche a te
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

Giovanni_3478 Profilo | Senior Member

Dai 2 link ne ho tratto che:

ci sono 2 metodi:

1)
1 esempio: Master.FindControl("Label1")
a cui poi può essere aggunto Master.FindControl("Label1").FindControl("Panel1")
a seconda di dove si trovi il controllo.

2 esempio:Master.FindControl("ctl00$ModalPopupExtender3");
si può scrivere anche lo UniqueId al posto del id del controllo server.
Lo UniqueID l'ho trovato facendo il trace della pagina.
Poi aprirò un thread per domandare se è possibile avere il trace quando scatta un
evento.
Mi piacerebbe ad esempio avere il trace quando diventa visibile, a seguito di evento
onclick, un panel.
Forse la classe da usare è la System.Web.TraceContext
- Quando uso lo uniqueID c'è la possibilità che il webserver cambi gli id nel rendering
oppure gli UniqueID restano sempre uguali?

Il lato positivo di questo metodo (Master.FindControl("Label1"))
è che si ha il pieno comando sul controllo che si vuol trovare.

2) con il secondo metodo
quello che consiste nel dichiarare una proprietà nella master,
si manipolano le proprietà senza che vi sia il pericolo di non trovare i controlli come
avviene con findcontrol;
ma ho un problema:
- il cast in quel caso
((MasterPage)this.Master).PnlVisible = false;
"... ti serve x dirgli che il tipo della tua master è quello tuo, ...." ;
in VB
come si casta (con ctype non mi riesce)?


freeteo Profilo | Guru

>1)
> 1 esempio: Master.FindControl("Label1")
>a cui poi può essere aggunto Master.FindControl("Label1").FindControl("Panel1")
> a seconda di dove si trovi il controllo.

tieni sempre presente che lavorare con le stringhe non è mail il massimo, perche' devi ricordarti di cambiarle a mano quando cambi i nomi dei controlli, mentre se lavori con nomi di oggetti puoi sfruttare il refactoring di visual studio e sai che non avrai problemi a runtime, inquanto avresti problemi in fase di compilazione


>2 esempio:Master.FindControl("ctl00$ModalPopupExtender3");
>si può scrivere anche lo UniqueId al posto del id del controllo
>server.
>Lo UniqueID l'ho trovato facendo il trace della pagina.
quel "ctl00$ModalPopupExtender3" non è latoserver, il codice che invece viene eseguito con "Master.FindControl(" è lato server, quindi li dentro devi dirgli il nome che ha a design time.
Se invece sei nel caso di dover andare a prendere qualcosa contenuto dentro a Repeater (o controlli del genere) devi andare a fare il "FindControl("IDdelSingoloTag")) nell'evento "OnItemDataBound", ovvero per ogni riga che sta' visualizzando.
Magari apriamo un altro thread che ne parliamo con calma, e in maniera piu' dettagliata se è questa la tua necessita'.


>Poi aprirò un thread per domandare se è possibile avere il trace
>quando scatta un
> evento.
>Mi piacerebbe ad esempio avere il trace quando diventa visibile,
>a seguito di evento
> onclick, un panel.
perfetto, apri il thread che cosi' ne discutiamo ben bene


>Forse la classe da usare è la System.Web.TraceContext
>- Quando uso lo uniqueID c'è la possibilità che il webserver
>cambi gli id nel rendering oppure gli UniqueID restano sempre uguali?
La proprieta' UniqueID è data a runtime per avere riferimento ad un oggetto, quando il runtime di asp.net gli cambia l'id nella generazione, diciamo che piu' che altro ti serve dal punto di vista "client", perche' se l'oggetto è lato server (quindi runat="server") ci accedi da intellisense con il nome che gli hai dato tu nella proprieta' "ID"



> - il cast in quel caso
> ((MasterPage)this.Master).PnlVisible = false;
>"... ti serve x dirgli che il tipo della tua master è quello
>tuo, ...." ;
> in VB
> come si casta (con ctype non mi riesce)?
prova con:
CType(Me.Master,MasterPage).PnlVisible = false
dove "MasterPage" è il nome della classe, se l'hai chiamata in un altro modo allora cambia con il nome tuo, ad esempio se aggiungi una pagina master che si chiama "miamasterpage.master" allora la classe di default ha il nome "miamasterpage", quindi sara' :
CType(Me.Master,miamasterpage).PnlVisible = false

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

Giovanni_3478 Profilo | Senior Member

Funziona in tutti e due i modi:
sia con il cast che
inserendo dopo la direttiva page
<%@ MasterType VirtualPath="~/Default.master" %>.

GRazie mille a tutti e due
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5