Ho un'applicazione Web ASP.NET 2.0 in parte navigata utilizzando i controlli DropDownList
. Quando uno di questi viene modificato, causa un postback, che viene quindi reindirizzato a un altro URL in base a ciò che è stato selezionato nel menu a discesa.Postback ASP.NET da elenco a discesa errato dopo aver utilizzato il browser Pulsante Indietro
Ho notato un comportamento strano quando si utilizza il pulsante Indietro del browser dopo aver utilizzato i menu a discesa. La procedura è la seguente:
- Effettuare una selezione in uno dei menu a discesa, causando un postback e il reindirizzamento. Bene finora.
- Fare clic sul pulsante Indietro del browser.
- In un altro menu a discesa di spostamento inferiore a quello utilizzato prima dello (sono tutti contenuti in uno
div
), effettuare una selezione. La pagina reindirizza allo stesso URL la prima volta, non a ciò che dovrebbe reindirizzare in base a questo altro menu a discesa.
Ho provato questo sia in Firefox 10 e IE9 e visto la stessa cosa. Ho guardato la scheda Rete in Firebug e ho visto che nel POST del passaggio 3, viene fatto riferimento al controllo corretto. Ma quando eseguo il debug, il gestore di eventi per il dropdown errato (quello utilizzato nel passaggio 1) si attiva.
Il codice è abbastanza semplice e diretto. Esempio di marcatura:
<asp:DropDownList runat="server" ID="ddlTest" AutoPostBack="true" />
I menu di scorrimento in realtà non sono semplici <asp:DropDownList ... />
elementi; Inserisco gli elementi optgroup
con un approccio simile a this.
Esempio di C#:
ddlTest.Click += new EventHandler(ddlTest_SelectedIndexChanged);
E in ddlTest_SelectedIndexChanged
:
if (ddlTest.SelectedValue != "")
{
Response.Redirect(MyUtilClass.GetUrl(ddlTest.SelectedValue));
}
Che cosa sta succedendo qui?
AGGIORNAMENTO 2/6/2012: Ho risolto questo controllando per il contenuto di Request["__EVENTTARGET"]
nei miei SelectedIndexChanged
gestori di eventi. Sono ancora curioso di sapere perché succede, però. Perché il primo evento viene ripetuto? E perché succede solo quando il secondo postback avviene da un controllo sotto il primo?
Puoi aggiungere i tag dalla pagina per i menu a discesa? Aiuterebbe. –
I tag per i menu a discesa? Intendi i loro ID sulla pagina? O il loro markup? Sembra quasi il markup che ho postato nella domanda. –
Solo un suggerimento: il tuo Nav non mostra quello che definirei comportamento previsto anche senza usare il pulsante Indietro. In genere, si suppone che nav sia sincronizzato con i tuoi contenuti. Ad esempio, quando fai clic sul nome di una scuola, quella scuola viene selezionata nell'elenco a discesa. In realtà, più lo guardo e più ci si sente * fuori *. Come se si potesse sbarazzarsi dell'intera nav sinistra (catturando quel bene immobile) e fornendo due drop down al vertice: scuola e sport. Gli altri sono completamente dipendenti da quelle informazioni comunque ... $ 0,02 per quello che vale. – NotMe