Domanda

Ho un'applicazione ASP.NET 1.1 e sto cercando di scoprire perché quando cambio un ComboBox quale valore viene utilizzato per riempirne un altro (relazione genitore-figlio), vengono prodotti due postback.

Ho controllato e ricontrollato il codice e non riesco a trovare la causa.

Ecco entrambi gli stack di chiamate che terminano con page_load

Primo postback (generato dal postback automatico di ComboBox)

Stack di chiamate postback http://www.juanformoso.com.ar/images/callstack1.jpg

Secondo postback (questo è ciò che voglio scoprire perché sta accadendo)

testo alternativo http://www.juanformoso.com.ar/images/callstack2.jpg

Qualche suggerimento?Cosa posso controllare?

È stato utile?

Soluzione

È un problema molto specifico con questo codice, dubito che sarà utile a qualcun altro, ma eccolo qui:

È stato aggiunto un assegno alla combo onchange con un if, se la condizione era soddisfatta, veniva effettuata una chiamata esplicita alla funzione postback.Se la combo era impostata su AutoPostback, asp.net ha aggiunto nuovamente la chiamata al postback, producendo i due postback...

L'html generato era così:

[select onchange="javascript: if (CustomFunction()){__doPostBack('name','')}; __doPostBack('name','')"]

Altri suggerimenti

La prima cosa che cercherei è che la seconda proprietà AutoPostBack del ComboBox non sia impostata su true.Se modifichi il valore nella seconda combinazione con la proprietà impostata su true, credo che genererà un postback su quel controllo.

Hai qualche codice da condividere?I doppi postback mi hanno afflitto così tanto nel classico ASP in passato che è stato ciò che alla fine mi ha spinto a passare a .NET una volta per tutte.Ogni volta che ho problemi come questi per .NET, vado su ogni elemento CONTROL e ogni PAGINA come caricamento, init, prerender, clic, SelectedIndexChanged e simili e inserisco un punto di interruzione.

Anche se non ho codice lì, inserirò qualcosa del tipo:

Dim i As Integer
i = 0

Di solito sono in grado di individuare alcune azioni che non mi aspettavo e di correggerle secondo necessità.Ti suggerirei di farlo qui.

Buona fortuna.

Controlla Request.Form["__EVENTTARGET"] per trovare il controllo che avvia il postback, che potrebbe aiutarti a restringere il campo.

Osservando gli stack di chiamate e alcuni Reflector (in ASP.NET 2 - non ho 1.1 a portata di mano): sembra che SessionStateModule.PollLockedSessionCallback faccia parte delle routine di avvio di HttpApplication.Potrebbe essere possibile che la tua app venga riciclata: sono abbastanza sicuro che un evento venga scritto nel registro eventi per questo.

Il mio unico altro suggerimento sarebbe Fiddler o qualcosa sul client per acquisire il traffico HTTP.

Questo è un post molto vecchio, ma le persone continuano a cercare questa soluzione esattamente come ho fatto io la settimana scorsa.

Come ha detto Grengby, gli eventi doppi sono le ragioni principali, ma rimuoverne uno non è sempre un'opzione.Almeno nel mio caso e ho dovuto risolverlo sulla richiesta di terze parti.

Ho aggiunto il seguente script e modificato il modulo ASP sulla pagina master:

<script>var Q = 0;</script>
<form id="Form1" runat="server" onsubmit="Q++; if(Q==1){return true;} else { return false;}">

Sembra che funzioni e ti invitiamo a inoltrare i tuoi commenti.

Arun

http://www.velocityreviews.com/forums/t117900-asp-net-multiple-postback-issue.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top