ASP.NET: JavaScript modifica il valore di un campo nascosto prima dell'invio
-
08-07-2019 - |
Domanda
Ho esaminato domande simili su Stack Overflow ma non sono stato in grado di trovare la soluzione a questo particolare problema. Ho una semplice pagina ASP.NET (non proprio, ma facciamo finta) con un pannello di aggiornamento al suo interno.
In questo pannello di aggiornamento c'è un controllo HiddenField
con un valore che verrà impostato / aggiornato tramite il mio JavaScript personalizzato. Il valore è aggiornato come posso vedere nel DOM usando Firebug.
Accanto a questo HiddenField
c'è un LinkButton
che chiama JavaScript per modificare il valore di HiddenField
usando OnClientClick (funziona).
LinkButton
ha anche un gestore OnClick
che viene eseguito dopo che il valore è stato modificato.
Tuttavia, nel gestore OnClick
, ottengo il valore iniziale di HiddenField
e non il valore impostato da JavaScript!
Perché questo? È questo un caso di " PEBKAC " ;?
EDIT: Ho provato la stessa cosa con un TextBox
senza successo. Ho anche provato a modificare il valore manualmente utilizzando Firebug prima di inviare il modulo, senza successo.
EDIT 2: Mi sono appena reso conto che Page_Load
viene chiamato prima del gestore OnClick
, che stava rovinando le cose. Non eliminerò la domanda poiché altre persone potrebbero avere lo stesso problema e potrebbero ritenerla utile.
Soluzione
Dovrai farlo utilizzando l'evento EndRequestHandler, fornito dal pannello di aggiornamento AJAX.
Guarda questo - >
http://www.codeproject.com/KB/ajax /AfterAjaxUpdate.aspx?display=Print
Altri suggerimenti
Questo mi sembra come se il viewstate ti facesse una brutta battuta (come spesso). Quello che immagino è che quando la pagina torna indietro, il campo nascosto viene inizializzato con il valore contenuto nel Viewstate.
Prova una cosa: non accedere direttamente al valore tramite yourHiddenField.Value
ma in OnInit della tua pagina ottenerlo con Request.Forms [yourHiddenField.UniqueId]
e lanciarlo su un campo nascosto ed estrarre il valore. Non sono sicuro che questa sia la sintassi giusta. Il "pubblicato" i valori dovrebbero essere nell'oggetto Request da qualche parte se ricordo bene. Vedi se ottieni il valore lì. Se lo ottieni lì, il problema è il viewstate che viene mappato indietro dopo l'evento OnInit della pagina. Quindi dobbiamo trovare una soluzione per questo ...
Come stai generando il nuovo input sul client? Sarebbe possibile invece eseguire questa operazione sul server?
In questo modo è possibile utilizzare solo OnClick
anziché sia ?? OnClick
che OnClientClick
.