Variabile globale da Masterpage

venerdì 21 novembre 2008 - 11.34

samar Profilo | Senior Member

Buongiorno a tutti, avrei la necessità di settare una variabile "globale" nella masterpage e utilizzarla nelle content ad essa collegate, inserendo questo nella mster:
Shared struttura As String = "1"

e:

Imports Aui

in una content di prova, mi genera il seguente errore:
'Aui.struttura' non è accessibile in questo contesto perché è 'Private'.
Consigli ????

--Edit--

Ho risolto dichiarandola Public Shared, volendola utilizzare anche nella pagina .aspx che istruzioni devo usare???

rossimarko Profilo | Guru

Ciao,

hai dichiarato la proprietà come shared quindi per accedere devi semplicemente scrivere:
NomeClasseMasterPage.Proprieta = valore

Occhio però che la tua variabile è shared, quindi hai un'unica istanza per tutte le pagine e per tutti gli utenti collegati.. E' corretto questo?
Se ad esempio l'utente 1 si collega e mettere la variabile a true e poi si collega l'utente 2 e la mette a false ti troverai la variabile a false anche per l'utente 1
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

samar Profilo | Senior Member

E' una variabile che verrà impostata automaticamente dal sistema in base al tipo di utente in effetti...quindi il valore cambia di sessione in sessione...
per poterla utilizzare per esempio nel selectcommand di un sqldatasource posso semplicemente utilizzare <%=struttura %> o sbaglio???

rossimarko Profilo | Guru

Se vuoi una variabile di sessione allora devi cambiare approccio..

A questo punto forse è più corretto creare una classe base per tutte le tue pagine web. All'interno di questa classe crei una property che rappresenterà il campo struttura e all'interno della property vai a prelevare i valori dalla session.

Public Class BasePage Inherits System.Web.UI.Page Public Property Struttura() As String Get Dim str As String = "1" If Session IsNot Nothing AndAlso Session("struttura") IsNot Nothing Then str = Convert.ToString(Session("struttura")) End If Return str End Get Set(ByVal value As String) Session("struttura") = value End Set End Property End Class

All'interno delle tue pagine poi dovrai sostituire l'inherits da:
Public Class Utenti Inherits System.Web.UI.Page

a

Public Class Utenti Inherits BasePage

e all'interno della classe potrai accedere automaticamente alla proprietà Struttura:
me.struttura = "2"
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

samar Profilo | Senior Member

Tutto perfetto, ma nn riesco a passarlo al selectcommand del sqldatasource?!?!?!

rossimarko Profilo | Guru

Si certo,

puoi definire un session parameter

<SelectParameters> <asp:SessionParameter Name="" SessionField="" /> </SelectParameters>

oppure intercettare l'evento OnSelecting da codice e salvare il valore:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

samar Profilo | Senior Member

Ora che me lo hai detto mi sembra ovvia la cosa
xò sembrerebbe nn funzionare, se stampo in html il valore della proprietà il valore è giusto, ma associandolo ad un parametro del sds la query nn va e se faccio stampare la selectcommand la stringa della query viene giusta ma con "... ?struttura ORDER BY ..."
sbaglio ad associargliela???


<SelectParameters> <asp:SessionParameter Name="struttura" SessionField="Struttura" Type="string" /> </SelectParameters>

rossimarko Profilo | Guru

Prova a mettere un defaultvalue e controlla anche le maiuscole/minuscole nel nome del parametro:

<asp:SessionParameter Name="empid" SessionField="empid" DefaultValue="5" />

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.sessionparameter.aspx
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

samar Profilo | Senior Member

Col DefaultValue va, quindi praticamente nn mi considera la variabile in sessione....
io nn la valorizzo da nessuna parte perchè per ora mi va bene che quando lancio la pagina mi prenda il valore che gli assegno "a mano" nella classe,devo forse cmq inizializzarla da qualche parte???

rossimarko Profilo | Guru

Allora il problema è quello, ovvero che non viene valorizzata. Ti consiglio a questo punto di valorizzarla al login, oppure di cambiare approccio e fare tutto da codice con l'evento Selecting
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

samar Profilo | Senior Member

Mi potresti spiegare brevemente come mai bisogna valorizzarla se ho messo la condizione nella classe???!
cmq la valorizzo nel pageload e funziona tutto, mi consigli un altro evento invece del load o va bene quello?

rossimarko Profilo | Guru

Ciao,

tu nella classe valorizzi il valore della property, non della session. Se usassi la property funzionerebbe tutto benissimo, ma siccome accedi direttamente alla session il valore non esiste fino a quando non lo imposti
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

samar Profilo | Senior Member

>Ciao,
>
>tu nella classe valorizzi il valore della property, non della
>session. Se usassi la property funzionerebbe tutto benissimo,
>ma siccome accedi direttamente alla session il valore non esiste
>fino a quando non lo imposti
>-----------------------------------------

Ho letto meglio il codice che mi hai postato e ho capito
grazie! alla prox!
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5