Conservazione dati tra due pagine e sessioni

lunedì 20 agosto 2007 - 20.13

_J_ Profilo | Senior Member

salve ragazzi,
qualcuno di voi gentilmente potrebbe spiegarmi come fare per mantenere i dati tra due pagine?
ve lo chiedo perchè vorrei risolvere questa situazione:

ho una anagrafica con due pagine: la prima mi fa vedere alcuni dati di cittadini presi da un database, e questa pagina contiene il pulsante 'modifica' che deve prendere il testo da una textbox che contiene il codice identificativo del cittadino (che poi è la chiave primaria per la tabella che contiene il record selezionato) e portarlo nella pagina di destinazione.

la seconda pagina, che è la destinazione, serve invece per modificare quanto si vede nella prima, cioè in essa vedo i dati del cittadino scelto mediante la textbox della pagina sorgente, e con opportuni campi vado a modificare questi dati reperiti.
il codice cittadino preso dalla pag sorgente lo immetto cioè in una textbox della pagina destinazione,che poi uso per fornire il parametro per la where della query di modifica


nella prima pagina uso server.transfer("dest.aspx",true"), mentre in quella di destinazione uso
textboxmia.text= request.form["textboxdellapaginasorgente"].tostring();

il passaggio dei dati lo vedo, ma all'atto della update vedo che, malgrado le modifiche che effettuo, è come se non facessi nulla, alla pressione del pulsante per confermare l'update non ottengo alcuna modifica...
ora non vorrei che il parametro passato in realtà non fosse stato passato affatto....

essendo che il concetto di conservazione di dati tra pagine web non mi è molto chiaro, qualcuno di voi potrebbe spiegarmi come funziona? e soprattutto potete chiarirmi il concetto di sessione e viewstate?sono concetti di cui ho sentito parlare, ma non ne ho esperienza...
e poi... come posso gestire queste cose nel mio caso?

grazie in anticipo a chi risponderà!





_J_

"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."

"Conosco me stesso? No, non parlo con gli estranei..."

n3mesi Profilo | Newbie

Senza utilizzare la sessione, puoi comunque passare i parametri da una pagina all'altra tramite query string.
Puoi fare in questo modo:

response.redirect("tuaPaginaDestinazione.aspx?CodCittadino=" + tuatextbox.text);

Poi nella pagina di destinazione riprendi questo valore sulla pageload:

string (o int, non so come ce l'hai) codice = Request.QueryString["CodCittadino"];

In alternativa, puoi utilizzare la sessione, ma è più performante la query string.

Con la sessione:


Session["CodCittadino"] = tuatextbox.text;

Poi nella pagina di destinazione, sempre sulla page load, riprendi questo valore:

se il codice è una stringa:
string codice = (string)Session["CodCittadino"];

se è un intero:
int codice = (int)Session["CodCittadino"];

io ti consiglio di utilizzare la query string.

_J_ Profilo | Senior Member

ma quello che hai suggerito tu funziona solo tra due pagine, o conserva i dati anche per altre pagine aperte in futuro?
e se voglio mantenere più dati nello stesso tempo?

te l'ho chiesto perchè il sito che realizzo si propone di far vedere i dati di un certo utente dopo che questi si è loggato, e cioè estrazione dei dati, modifica ecc, il tutto chiaramente in diverse pagine che di volta in volta devono tirare fuori i giusti dati in base al login...

ti ho poi parlato delle sessioni perchè da qc parte ho letto che le sessioni vengono aperte dopo il login, e chiuse all'uscita dal sito, ma di più non so...e se non sbaglio si usano nel caso di passaggi di dati tra molte pagine diverse...
in internet non ho ancora trovato una pagina, un articolo ecc che mi spieghino chiaramente come funziona il meccanismo della conservazione di dati nella totale durata di un login-logout di un utente..

cosa mi suggeriresti di fare?

cmq grazie per il consiglio

_J_

"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."

"Conosco me stesso? No, non parlo con gli estranei..."

n3mesi Profilo | Newbie

Allora in questo caso devi per forza utilizzare le sessioni. Così mantieni il dato su più pagine, cosa che non puoi invece fare con la query string.
In ogni pagina che ti serve, basta che fai:

string codice = (string)Session["CodCittadino"];

_J_ Profilo | Senior Member

>In ogni pagina che ti serve, basta che fai:
>string codice = (string)Session["CodCittadino"];

codcittadino proviene dalla pagina di origine, vero?
se non sbaglio con le sessioni, cliccando sui pulsante indietro-avanti del browser, dovrei vedere i dati conservati, giusto?
_J_

"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."

"Conosco me stesso? No, non parlo con gli estranei..."

n3mesi Profilo | Newbie

Se li ricarichi sulla pagina si...
Nel senso...se alla pageload le variabili di sessione sono diverse da null, allora le puoi utilizzare per riempire i tuoi controlli...
Esempio...sulla pagina di origine c'è una textbox dove inserisci il codice del cittadino...
Puoi fare in diversi modi...
Con le sessioni, puoi mettere un controllo sulla page load:
if (Session["CodCittadino"] != null)
tuaTextbox.text = (string)Session["CodCittadino"];

in modo che, la prima volta che carichi la pagina la text box è vuota...(poichè la variabile è di sessione è null).

Quando inserirai il codice e cliccherai sul pulsante, setterai la variabile di sessione:

protected pulsante_onClick(... ...)
{
Session["CodCittadino"] = tuaTextbox.Text;
...//più il codice che devi far eseguire
}

ora la variabile di sessione è settata...

ogni volta che dovrai ricaricare la pagina di origine da ora in avanti, sulla textbox apparirà anche il codicecittadino...(ramo dell'if nella pageload).

_J_ Profilo | Senior Member

se ad esempio compilo un form e confermo la compilazione, e x un qc motivo poi devo tornare indietro (pulsante 'indietro' del browser), con le sessioni è praticamente sicuro che il form me lo ritrovo compilato, vero?

correggimi se sbaglio...

te lo chiedo perchè con il server.transfer questo non succede.... porto un dato nella pagina successiva, ma quando vado indietro col browser mi dice che è impossibile visualizzare la pagina...
_J_

"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."

"Conosco me stesso? No, non parlo con gli estranei..."

n3mesi Profilo | Newbie

Si, se sulla page load della pagina di origine ti occupi di riprendere i valori dalle variabili di sessione e di caricarli nei tuoi controlli...
Ma attenzione, ogni volta che non ti servono più, ricordati di mettere a null tutte le variabili di sessione...
Per esempio, hai una pagina con 3 textbox, nome, cognome, alias e un bottone per inserire un utente nel database. La prima volta riempi tutti e 3 i campi e li inserisci nel database...se ora non metti a null tutte le variabili di sessione utilizzate, se vuoi fare un secondo inserimento, e inserisci solo cognome e alias, clicchi sul pulsante, poi per qualche motivo vuoi ritornare alla pagina di origine, le textbox saranno caricate con cognome e alias attuali, ma col nome del precedente, rischiando di compromettere l'integrità dei dati. Una sessione rimane valida (e quindi le variabili di sessione sono preservate) finchè non fai il logout o non chiudi il browser...

_J_ Profilo | Senior Member

era quello che sospettavo.. devo settare a null non appena finisco l'uso delle suddette variabili...
ora è tutto chiaro..

grazie per le delucidazioni!

_J_

"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."

"Conosco me stesso? No, non parlo con gli estranei..."
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