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
Versuchen Sie, den Anzeigezustand zu aktivieren. Dies ist ein häufiges Problem.
EDIT
Wenn Sie Ansichtszustand nicht aktivieren möchten, müssen Sie die Dropdown-Liste Wert selbst aufspüren müssen, wie dieser Kerl tat DropDownList OnSelectedIndexChange to 0th index w/out ViewState
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.
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.
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