2012-09-07 8 views
5

Sto riscontrando un problema con un elenco a discesa ASP.NET molto normale. Ho un elenco a discesa nella pagina con AutoPostback=false. e un codice per generare contenuti di DropDownList:Dropdownlist selectedindex non funziona sull'aggiornamento della pagina

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     this.dropDownList.Items.Add(new ListItem("text1", "value1")); 
     this.dropDownList.Items.Add(new ListItem("text2", "value2")); 
     this.dropDownList.SelectedIndex = 0; 
    } 
} 
  • eseguire la pagina, e selezionare la seconda opzione: text2.
  • Dopo di che, premere F5, questo farà un caricamento della pagina (si noti che non ho ancora fatto alcun postback, basta cambiare la voce selezionata di dropdownlist e premere F5)

Mi aspettavo che il dropdownlist sarà ora selezionato l'elemento predefinito con index = 0, ma l'elemento selezionato è ancora l'elemento "testo2" - l'elemento che ho scelto. In questa situazione, lo this.dropDownList.SelectedIndex = 0; non funziona.

Io assolutamente non capisco. Qualcuno può aiutarmi?

Aggiornamento: Questo comportamento si verifica solo in Firefox, non avviene in Chrome/IE.

+0

quando si esegue un'AutoPostBack vera pagina di blocco if non ha colpito e ottieni il txt2 come mossa selezionata> this.dropDownList.SelectedIndex = 0; fuori dal blocco! Ispostback – Devjosh

+0

ma sto facendo AutoPostBack = false e il codice this.dropDownList.SelectedIndex = 0; è stato colpito – user1514431

+0

Il mio male non ho potuto leggere quello in questione – Devjosh

risposta

1

Quando si preme F5, invierà le intestazioni di post insieme alla richiesta.
L'ultima richiesta era di selezionare la seconda opzione. In modo che venga selezionato.

Se si digita di nuovo l'URL o si preme invio nella barra degli indirizzi; non invierai i dati del post. In questo caso il tuo SelectedIndex sarà 0.

+0

ben spiegato +1 già – Devjosh

+0

Questo è davvero interessante. Quindi, c'è una soluzione per dimenticare l'ultima richiesta, e basta selezionare il primo elemento come voglio? – user1514431

+1

F5 ha lo scopo di inviare nuovamente l'ultima richiesta. Puoi guardare nella storia della cronologia html5. Potrebbe essere d'aiuto Inoltre puoi ascoltare F5 in javascript e impostare 'location.href'. – nunespascal

2

Sembra che tu stia fraintendendo cosa significa post back; lo fa non significa solo un aggiornamento della pagina. Quando si fa clic su F5 nel browser, la richiesta originale verrà inviata al server e Page.IsPostBack sarà false.

Se si desidera eseguire un postback effettivo, aggiungere un controllo server asp:Button alla pagina e fare clic su di esso (o semplicemente impostare AutoPostBack=true in DropDownList).


Sembra che Firefox sta facendo una sorta di cache sul lato client, in modo da non fare un altro di andata e ritorno al server quando si preme F5. È possibile aggirare il problema reimpostando l'elemento select al caricamento della pagina.

<script type='text/javascript'> 
    document.getElementById('<%= dropDownList.ClientID %>').selectedIndex = 0; 
</script> 

(Nota:. Mettere questo nella parte inferiore della pagina in modo che esso esegue dopo che il documento è stato caricato) (! Ispostaback)

+0

Grazie per il tuo commento. Quello che sto cercando di fare qui è di gestire il caso in cui l'utente preme il pulsante F5 (o premere il pulsante di aggiornamento nel browser). – user1514431

+0

@ user1514431 Ho aggiornato la mia risposta per rispondere meglio alla tua domanda. – McGarnagle

+0

Ottimo! Lo sto facendo anche per lavorare con FF. Ma sto anche trovando una soluzione migliore perché questo comportamento si verifica non solo per dropdownlist ma per ogni controllo nella pagina (casella di testo, casella di controllo ...). Almeno abbiamo trovato una soluzione come ultima risorsa qui. – user1514431