2010-03-16 9 views
7

Ich habe eine ASP.NET DropDownList mit AutoPostBack=true und EnableViewState=false. Ich habe einen Knopf auf der Seite, der nichts tut. Wenn ich die Auswahl im ddl ändere, postet es zurück, was erwartet wird. Wenn ich auf die Schaltfläche klicke, wird die Seite zurückgesendet und die SelectedIndexChanged der ddl wird ausgelöst. Warum wird es gefeuert?Warum wird SelectedIndexChanged für eine DropDownList ausgelöst, wenn auf eine Schaltfläche geklickt wird?

Antwort

10

Das Feedback von Microsoft: - http://connect.microsoft.com/VisualStudio/feedback/details/103844/dropdownlist-always-fire-selectedindexchanged-event-when-viewstate-is-disabled-and-the-selected-item-is-not-changed-by-the-user

"Vielen Dank für Ihre Rückmeldung. Wenn ViewState auf der Seite oder auf dem DropDownList-Steuerelement deaktiviert ist, wird ausgewählt Index kann nicht gespeichert werden, so jeder Postback sieht aus wie der ausgewählte Index wurde geändert. Sie können den ausgewählten Index selbst und vergleichen, um zu sehen, ob die Auswahl wirklich geändert hat, oder Sie ViewState auf der DropDownList aktivieren können. "

In Ihrem Fall der Ansichtszustand des Dropdownlist ist falsch. Die gleiche aktivieren oder Sie können Index des ausgewählten Elements vergleichen, wie oben vorgeschlagen.

1

Wenn Sie Ihren ddl in page_load laden, wenn Sie auf die Schaltfläche Button geht es page_load wieder und es lädt wieder ddl Elemente, die ausgewählten Index ändert.Ich weiß aber nicht Ihren Code, also ist dies eine Annahme.

0

Ich hatte das gleiche Problem.Ich fand mein Problem war, dass ich meine angerufen habe Renderfunktion Page_Load

Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.PreRender 

Ich habe komplett übersehen, dass die Seite geladen Page_Load als eine Standard-Ladefunktion, dann wieder geladen, wenn es prerender lief. Ich habe es zu dem folgenden geändert, und jetzt wird die Funktion nur einmal aufgerufen:

Sub Renderer(ByVal sender As Object, ByVal e As EventArgs) Handles Me.PreRender