Почему SelectedIndexChanged срабатывает для DropDownList при нажатии кнопки? - PullRequest
7 голосов
/ 16 марта 2010

У меня есть ASP.NET DropDownList с AutoPostBack=true и EnableViewState=false. У меня есть кнопка на странице, которая ничего не делает. Если я изменю выбор в ddl, он отправляет назад, что ожидается. Если я нажимаю кнопку, страница отправляется обратно и ddl's SelectedIndexChanged срабатывает. Почему его увольняют?

Ответы [ 4 ]

10 голосов
/ 16 марта 2010

Отзыв от 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

"Спасибо за ваш отзыв. Если ViewState отключен на странице или в элементе управления DropDownList, выбранный индекс не может быть сохранен, поэтому каждый постбэк выглядит как выбранный Индекс был изменен. Вы можете сохранить выбранный вами индекс и сравнить с этим, чтобы увидеть, если выбор действительно изменился, или вы можно включить ViewState на Выпадающий список. «

В вашем случае состояние просмотра раскрывающегося списка ложно. Включите тот же или вы можете сравнить индекс выбранного элемента, как предложено выше.

2 голосов
/ 16 марта 2010

Попробуйте включить viewstate. Это общая проблема.

EDIT

Если вы не хотите включать viewstate, вам придется отслеживать значение выпадающего списка самостоятельно, как этот парень сделал DropDownList OnSelectedIndexChange для 0-го индекса без ViewState

1 голос
/ 16 марта 2010

Если вы загружаете свой ddl в page_load, при нажатии кнопки он снова переходит на page_load и снова загружает элементы ddl, которые изменяют выбранный индекс. Но я не знаю ваш код, так что это предположение.

0 голосов
/ 12 июня 2012

У меня была такая же проблема. Я обнаружил, что моя проблема в том, что я вызвал свою функцию рендеринга Page_Load.

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

Я полностью упустил тот факт, что страница загрузила Page_Load как функцию загрузки по умолчанию, а затем снова загрузила ее, когда она запустила предварительный просмотр. Я изменил это на следующее, и теперь функция вызывается только один раз:

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