Variabili di stato...eventi di reload form...questi sconosciuti....

venerdì 18 febbraio 2005 - 14.22

BELENOS Profilo | Junior Member

Salve a tutti...io ho un form di rilevazione dei tasti inseriti da un utente...per mezzo di un campo nascosto mi memorizzo il carattere inserito (che corrisponde ad un'azione che l'utente intende compiere)...però non capisco una cosa...avendo messo nell'evento PAGE_LOAD(...) le chiamate alle varie sub ho notato che mi fa 3 caricamenti della pagina prima di aspettare un nuovo input...e ovviamente al primo caricamento non trovando nessun dato nel campo nascosto, non mi fa le operazioni(e fin qui tutto ok)...al secondo ricarico si legge i valori inseriti(e fin qui tutto ok), ma al terzo ricarica i valori nulli dell'inizio, resettandomi allo stato iniziale la form e lasciandomi a bocca asciutta...

C'è qualcuno che sa come posso fare per ovviare ad un problema del genere??Spero di essermi spiegato abbastanza bene...

Aggiungo che ho provato colla variabile di stato viewstate(".."), e posto il fatto che l'abbia adoperata bene, non mi memorizzava i valori nemmeno un colpo...con la variabile di sessione session("..") è andata meglio...però al terzo ricarico ritorna tutto come prima....come fare?


Spero che qualcuno risponda...sinceramente sono disperato...

FrancescoGuadagno Profilo | Senior Member

Non è molto chiaro, comunque ti posso forse dare due dritte:

1) se i valori che memorizzi si riferiscono a WebControls, questi hanno già per default la ViewState attivata, quindi non serve risalvare tali valori nelle ViewState;

2) il fatto che la pagina in un certo senso si annulli può voler dire che nella Page_Load non hai considerato il Page.IsPostBack

più chiaramete, nella load della pagina devi inserire:

Page_load(...)
{
if (!Page.IsPostBack)
{
//inserisci qui il codice che vuoi sia eseguito solo la prima volta che carichi la pagina
}
else
{
//inserisci il codice che vuoi venga eseguito ad ogni evento sulla pagina
}
}

Spero di aver centrato il problema, altrimenti cerca di spiegare meglio il problema..

ciao

BELENOS Profilo | Junior Member

Ti ringrazio della risposta...però ahimè ho tralasciato di dire che avevo già provato anche inquel modo, testando la proprietà ispostback della pagina....il fatto è che se faccio come mi hai detto tu, al primo carico pagina si prende valori nulli, e poi ai successivi inserimenti di caratteri mi dà sempre valori nulli nel campo nascosto...non so se mi sono spiegato...a uesto punto ho provato in un altro modo...ovvero:

sub page_load(..)
if page.ispostback XOR (not bTest ) then
bTest=false
'codice da esegure
end sub

dove bTest la prima volta ha valore true e quindi non entra...la seconda ispostback è true e bTest è not (true) e quindi con lo XOR entra e imposta bTest a false ed esegue le istruzioni....al terzo ricarico mi resetta i valori e non me li ritrovo +....scusa se prima non sono stato sufficientemente chiaro.

FrancescoGuadagno Profilo | Senior Member

scusami, ma continuo a non inquadrare bene il problema....


che cosa intendi ad esempio con rilevazione dei tasti inseriti?!?

BELENOS Profilo | Junior Member

Con una funzione javascript che poi integro nel codice vb.net, rilevo l'evento onkeypress e il relativo codice del tasto premuto che poi mando in input ad un'altra funzione che mi processa le varie casistiche di tasti premuti...e si passa sempre ovviamente dalla PAGE_LOAD(..)

FrancescoGuadagno Profilo | Senior Member

quindi se ho capito bene, tu forzi da vb (o js) il postback (submit()) ad ogni pressione di tasto...


Io farei così:

Page_load(...)
{
if (!Page.IsPostBack)
{
//inserisci qui il codice che vuoi sia eseguito solo la prima volta che carichi la pagina

}

}

FrancescoGuadagno Profilo | Senior Member

Ho fatto un casino... ho postato per sbaglio..

quindi se ho capito bene, tu forzi da vb (o js) il postback (submit()) ad ogni pressione di tasto...


Io farei così:

Page_load(...)
{
if (!Page.IsPostBack)
{
//inserisci qui il codice che vuoi sia eseguito solo la prima volta che carichi la pagina
if ( tuaHidden.value!= "")
{
//l'utente ha inserito qualcosa. Eventualmente ti salvi nella Session il valore per capire, al prossimo inserimento, se aveva
//inserito altri valori. Non puoi salvarla nella ViewState perchè perdi il contenuto ad ogni submit() forzato da js o vb
}
}

}

se continuo a non capire, forse è meglio se incolli qualche spezzone di codice :)

BELENOS Profilo | Junior Member

Il fatto che mi hai detto che ad ogni submit forzato da js o vb si perde il contenuto della viewstate mi sfuggiva e ti ringrazio per avermi dato questa dritta....però il discorso che ti facevo era che non so perchè mi faccia un carico di pagina per 3 volte ....al primo caricco pagina se faccio if not page.ispostback...ecc.ecc. lui si prende i valori nulli del primo carico pagina....e quando ritorno ad inserirli non mi entra+ nell'if...se inverto il test, al primo giro nn fanulla...al secondo mi ricarica la pagina e mi carica i valori giusti e al terzo(da come l'ho scritto io non dovrebbe entrare nell'if, eppure eentra lo stesso) mi sporca ancora le mie belle variabili con valori nulli..cmq ora provo col tuo meTodo....semmai ti posto il mio

BELENOS Profilo | Junior Member

Allora....ho provato col tuo dimostrativo...e come sospettavo con "if not page.ispostback" memorizza un valore nullo nella hiddenbox....se inverto il test mettendo "if page.ispostback" allora memorizza...però....che strano....ora devo vedere se si comporta come prima....

BELENOS Profilo | Junior Member

Niente...mi resetta ancora il form :-(

FrancescoGuadagno Profilo | Senior Member

prova a postare del codice, forse è meglio. (non utilizzi MSN?)

BELENOS Profilo | Junior Member

MSN non ce l'ho sul lavoro(sai motivi di privacy)...se vuoi ti posto il ccodice qui....è sufficiente il codice relativo alla page_load?

FrancescoGuadagno Profilo | Senior Member

sarebbero più utili i duepezzi:
1)page_load
2) js o vbscript

BELENOS Profilo | Junior Member

Ecco qui

public sub page_load(sender as object, e as eventargs)
'if not page.ispostback then
'if page.ispostback then
'msgbox("prova1 is " & prova1.value)
'prova1.value=request("prova1")
'msgbox("prova1 is " & prova1.value)
if page.ispostback xor (not bTest) then
bTest=false
if prova1.value <> "" then
Session("myChar")=prova1.value
Session("SelOperatore")=SelOperatore.text
SelOperatore.Attributes.add("onkeypress","keyhandler;")
msgbox("pageload mychar is " & session("myChar") & " selOperatore is " & session("SelOperatore"))

'menu.attributes.add("onkeypress","Form_Keyup(Session('myChar'),Session('SelOperatore'),)")
Form_Keyup(Session("myChar"),Session("SelOperatore"),)
'VisualizzaOperatore(Session("SelOperatore"))
'ControlloAbilitazioni(val(Session("SelOperatore")))
end if
end if
end sub

<script language="JavaScript"><!--
// if (document.layers) document.captureEvents(Event.KEYPRESS); // needed if you wish to cancel the key


document.onkeypress = keyhandler;

function keyhandler(e) {
if (document.layers)
Key = e.which;
else
Key = window.event.keyCode;
keychar = String.fromCharCode(Key);
if (Key != 0){
if (Key != 13)
alert("Key pressed! ASCII-value: " + Key + " " + keychar);
else{
alert("Hai premuto INVIO.." + Key + " " + keychar);
//alert("carattere passato a Form_Keyup(" & Keychar & ")");
}
//alert(keychar);
//alert(key);
//document.menu.prova.value=keychar;
//alert("document1 is " + document.menu.prova.text);
document.menu.prova1.value=keychar;
//alert("document2 is " + document.menu.prova1.value);
//document._ctl0.prova2.value=keychar;
//alert("document3 is " + document._ctl0.prova2.value);
keyhandler=keychar;
}}
--></script>

BELENOS Profilo | Junior Member

Penso cmq di aver quasi risolto,....ora dovrei fare in modo che al primo load pagina, la suddetta abbia valori nulli....

BELENOS Profilo | Junior Member

Tutto risolto :-)
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