Variabili ListBox e postback

lunedì 24 dicembre 2007 - 16.15

riminese77 Profilo | Junior Member

Ciao a tutti,
ho caricato una listbox tranquillamente(dop oi vostri suggerimenti), ora xò ho difficoltà a gestirla dopo il postback
Perchè perde tutti i dati... c'è un metodo per farla rimanere in memoria?
Pensavo ad una session.... ma ovviamente non funziona.

Dim squadra As New ListBox

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
If IsPostBack = True Then
squadra = Session.Item("Formazione")
MsgBox(CInt(squadra.Items.FindByText("P5").Value))
Exit Sub
End If
carica listbox
end sub

Grazie

freeteo Profilo | Guru

ciao,
la tua domanda è il problema classico del passaggio da applicazioni win32, a applkicazioni Web.
Il fatto è che l'applicazione web usa Http, che è un protocollo passivo, ovvero tu chiedi qualcosa al server, lui risponde e poi del client che ha fatto la richiesta il server se ne dimentica.
Quando invece hai un'applicazione Win32, l'applicazione è sempre attiva, sa sempre cosa sta succedendo, perche' il thread che la lancia (windows quando fai click sull'exe) rimane in esecuzione.Questo lo puoi notare se guardi un'applicazione windows, nel file "Program.cs" il metodo "main" è quello lanciato (l'entry point dell'applicazione) e li dentro c'e' il codice di "Application.Run(...)" dove il processo lancia la prima form etc..e poi li dentro rimane, infatti quando chiudi la maschera principale l'applicazione va giu'.

Con Asp.net, la cosa è diversa, ogni volta che chiedi una pagina, l'applicazione parte, carica quello che deve caricare, esegue il codice per caricare dati /fare operazioni e poi ti da giu' l'html. Ma di quella pagina non c'e' traccia in memoria, ovvero quando al richiedi di nuovo, lui (IIS) lancia un'altro thread e quindi non sa cosa era stato fatto da quello prima...a meno di non avere delle "valigie" di info che sono il ViewState (o Session ma il viewstate è quel meccanismo automatico per la gestione di queste operazioni).
Grazie proprio al viewstate, lui è in grado di ricostruire lo stato di visualizzazione dei controlli della pagina e quindi comportarsi come ci aspettiamo.

Questo meccanismo è abilitato impostando nella pagina il fatto che lui generi nell'html che butta giu' al browser, queste informazioni di "stato", percio' verifica che nella pagina ci sia EnableViewState="true"

Lo so che forse sono stato 1po contorto ma il concetto è importante da capire, perche' adesso hai un problemino semplice ma in futuro si possono avere delle difficolta' dato che ovviamente, si è sempre abituati a pensare ad applicazioni win32...


Un esempio utile per capire il fiume di parole (alla Jalisse) eccolo qui:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

come vedi ho settato appositamente "EnableViewState=true", anche se di default lo dovrebbe essere gia'...

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo
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