2012-09-07 19 views
5

Ich habe ein Problem mit einer ganz normalen ASP.NET Dropdownlist mit. Ich habe eine Dropdown-Liste auf der Seite mit AutoPostback=false.Dropdownliste selectedIndex funktioniert nicht auf Seite aktualisieren

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; 
    } 
} 
  • Führen Sie die Seite, und wählen Sie die zweite Option: text2 Und ein Code Dropdownlist-Inhalt erzeugen.
  • Danach drücken Sie F5, dies wird eine Seite zu laden tun (beachten Sie, dass ich keine Postbacks noch getan haben, nur das Element der Dropdownliste ausgewählt ändern und drücken Sie F5)

erwartete ich, dass die Dropdownlist wird jetzt den Standardartikel mit index = 0 ausgewählt, aber der ausgewählte Artikel ist immer noch der Artikel "text2" - der Artikel, den ich gewählt habe. In diesem Fall funktioniert die nicht.

Ich verstehe nicht ganz. Könnte mir jemand helfen?

Update: Dieses Verhalten tritt nur in Firefox auf, es passiert nicht in Chrome/IE.

+0

, wenn Sie tun, um eine Autopostback wahr die Seite, wenn Block nicht trifft und Du bekommst den txt2 wie ausgewählt move> this.dropDownList.SelectedIndex = 0; ! aus der IsPostBack – Devjosh

+0

blockieren, aber ich tue Autopostback = false und den Code this.dropDownList.SelectedIndex = 0; wird getroffen – user1514431

+0

Mein schlechtes ich konnte das nicht in Frage – Devjosh

Antwort

1

Wenn Sie F5 drücken, wird die Post-Header zusammen mit der Anforderung senden.
Ihre letzte Anfrage war, die zweite Option auszuwählen. Das wird also ausgewählt.

Wenn Sie die URL erneut eingeben oder in der Adressleiste eingeben treffen; Sie werden die Postdaten nicht senden. In diesem Fall wird Ihr SelectedIndex 0 sein.

+0

schön erkannten +1 bereits lesen – Devjosh

+0

Das ist wirklich interessant. Also, gibt es eine Lösung, um die letzte Anfrage zu vergessen, und wählen Sie einfach den ersten Artikel, wie ich will? – user1514431

+1

F5 soll die letzte Anfrage erneut senden. Sie können in der html5-History-API nachsehen. Es kann helfen. Sie können auch in Javascript auf F5 hören und 'location.href' einstellen. – nunespascal

2

Es scheint, als ob Sie Missverständnis sind, was Post zurück bedeutet; es tut nicht bedeuten nur eine Seite aktualisieren. Wenn Sie F5 im Browser getroffen, wird die ursprüngliche Anforderung an den Server gesendet werden, und Page.IsPostBackfalsch sein wird.

Wenn Sie ein tatsächliches Postback machen möchten, fügen Sie ein Server-Steuerelement auf der Seite hinzu und klicken Sie darauf (oder setzen Sie einfach AutoPostBack=true auf die DropDownList).


Es scheint wie Firefox eine Art von Client-seitiges Caching tut, damit es nicht zu weiteren Roundtrip zum Server, wenn Sie F5 treffen. Sie können dies umgehen, indem Sie das Element select beim Laden der Seite zurücksetzen.

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

(. Hinweis: setzen diese am unteren Rand der Seite, so dass sie ausgeführt wird, nachdem das Dokument geladen ist) (! Ispostaback)

+0

Vielen Dank für Ihre Erklärung. Was ich hier versuche ist, den Fall zu behandeln, in dem der Benutzer die F5-Taste drückt (oder den Refresh-Knopf im Browser drückt). – user1514431

+0

@ user1514431 Ich habe meine Antwort aktualisiert, um Ihre Frage besser zu beantworten. – McGarnagle

+0

Großartig! Ich mache das, um mit FF zu arbeiten. Aber ich finde auch eine bessere Lösung, weil dieses Verhalten nicht nur für die Dropdown-Liste, sondern für jedes Steuerelement in der Seite (Textfeld, Kontrollkästchen ...) passiert. Zumindest haben wir hier eine Lösung gefunden. – user1514431

Verwandte Themen