GESTIONE CLIENT

lunedì 15 settembre 2003 - 16.31

050782 Profilo | Junior Member

Devo gestire delle variabili "globali" lato client, cioè l'applicazione sta sul server, ma ogni utente che vi si connette deve poter valorizzare differentemente delle variabili.
Come posso gestire questa cosa??

Brainkiller Profilo | Guru

Non si capisce bene ciò che dici?
Che cosa vorresti realizzare? Forse capisco meglio.
Hai qualche esempio che hai visto in giro?

Ciao
David De Giacomi

050782 Profilo | Junior Member

Inizialmente avevo utilizzato una STRUCTURE, ma facendo delle prove mi sono accorta che anche se da due client impostavo valori diversi, veniva considerato per entrambi lo stesso (praticamente l'ultimo che veniva impostato).
Si capisce un po' meglio??

Admin Profilo | Junior Member

Ciao,

occorre fare un pò una distizione su codice che gira sul server e codice che invece gira sul client.

Sul server:
gira il codice che genera output da inviare all'utente, nella maggior parte dei casi sottoforma di HTML.
Tale codice può essere eseguito, grazie alla nuova visione di programmazione event-driven di asp.net, a seguito di azioni sul client che provochino delle postback sul server, passando determinati valori, come parametri post.

Sul client:
gira del codice di scripting, in genere javascript, che può essere generato ed inviato sul client dal codice che gira sul server.

Considerazioni:
potresti usare delle variabili globali di javascript, ma se lo fai alla postback la pagina verrà ricreata e le variabili perderanno il loro valore.

Soluzione:
1) Puoi usare l'oggetto ViewState da codice server, per inserire dei valori che vengono mandati sul client e rispediti sul server ad ogni postback: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemWebUIControlClassViewStateTopic.asp
2) puoi far renderizzare sul client un controllo HtmlInputHidden con il valore in questione, che sarà manipolabile da codice javascript con document.all["nomehidden"].value, ed il suo contenuto sarà ripostato e disponibile sul server.

Ci possono essere altre soluzioni, ma avrei bisogno di sapere per cosa ti serve in realtà quanto hai richiesto.

Spero di esserti stato d'aiuto.

Ciao

Stefano Giannone [MCP .NET]

Admin Profilo | Junior Member

tutto il discorso qua sotto vale se stai parlando ovviamente di una applicazione ASP.NET... visto che siamo dentro ad un forum denominato "ASP.NET".

Ciao

Stefano Giannone

050782 Profilo | Junior Member

ok, grazie.
Cercherò di capire come utilizzare il ViewState

050782 Profilo | Junior Member

Non mi sembra una soluzione.... oppure non capisco come funziona la ViewState.
Cmq, le variabili devono essere visibili in tutta l'applicazione (ci sono molte form!)

Admin Profilo | Junior Member

prego.

Cmq non è difficile... si tratta di usare delle istruzioni semplicissime, del tipo:

ViewState("miaChiave") = "ciao"

e per recuperare:

Dim myVar as String
myVar = DirectCast(ViewState("miaChiave"), string)

Faccio il DirectCast per riportare nel tipo "string" il valore restituito da viewstate che è "object" (in VB.NET non sarebbe nemmeno necessario con option strict impostato a off, che è il default)

Ricorda che viewstate è ottimizzato per contenere istanze di tipi primitivi (integer, boolean, etc.) e per String, ArrayList e HashTable.

Spero di esserti stato d'aiuto.

Alla prossima.

Ciao

Stefano Giannone [MCP .NET]

050782 Profilo | Junior Member

Ma "miachiave" deve essere un controllo?

Admin Profilo | Junior Member

no... "miaChiave" è soltanto una stringa che ti serve per riporre il tuo valore, e per poterlo recuperare in seguito.

ViewState è una collezione di oggetti di tipo "chiave/valore". Questo significa che puoi inserire dentro la collezione tutti gli oggetti (e quindi stringhe, array, numeri, etc.) che vuoi... soltanto che ogni volta che li inserisci devi fornire una chiave, con la quale l'oggetto verrà memorizzato all'interno della collezione.

Questo ti permetterà in seguito di poter recuperare facilmente il tuo oggetto dalla collezione di oggetti semplicemente indicando a ViewState con quale chiave è stato memorizzato... e quindi ViewState("nomeChiave") ti restituirà l'oggetto che tu avevi riposto precedentemente.

Spero di esser stato chiaro.

Ciao

Stefano Giannone [MCP .NET]

Admin Profilo | Junior Member

stai parlando di molte form... cioè molte "web form", giusto ?

Ok, se è così credo finalmente di aver capito... non avevo letto che il valore ti servisse condividerlo tra le varie form.

In questo caso devi utilizzare Session.

Funziona allo stesso modo di come ti ho descritto poco fa la ViewState, e quindi :

Session("miaChiave") = "ciao"

e per recuperare:

Dim myVar As String
myVar = DirectCast(Session("miaChiave"), String) ' myvar conterrà "ciao"

La differenza con ViewState sta nel fatto che, Session viene memorizzato direttamente sulla memoria del server, ed è collegato all'utente che sta eseguendo la sessione dell'applicazione.

Quindi non viene inviata al client come avveniva con la ViewState.

In session puoi memorizzare tutto (sempre con le dovute cautele, occupi memoria sul server)... non valgono i limiti che ti ho indicato poco fa per viewstate.

Qui trovi esempio e reference su session:
http://msdn.microsoft.com/library/en-us/dv_vbcode/html/vbtskCodeExampleReadingSessionState.asp?frame=true

Ciao

Stefano Giannone [MCP .NET]

050782 Profilo | Junior Member

Ci avevo già pensato, ma volevo sapere se c'è un modo differente di gestire la cosa

Admin Profilo | Junior Member

direi proprio di no.
Session serve proprio a questo.

Se i dati non sono riferiti e collegati con l'utente che sta navigando, ma al contrario invece sono dei dati che possono essere condivisi da tutti gli utenti (in genere quasi mai)...allora puoi usare Cache o Application, che funzionano più o meno come Session nell'inserire e recuperare... ma come ti ho detto hanno scopi diversi da session (valori condivisi a tutti gli utenti).

Ciao

Stefano
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