Могу ли я узнать, какие события управления будут срабатывать при обратной передаче ASP?
Вопрос
Можно ли получить список управляющих событий, которые должны сработать до того, как они произойдут, скажем, внутри обработчика Page_Load
?
Например, если была нажата кнопка, могу ли я выяснить это до вызова обработчика события button_click
?
Решение
Вы выбрали действительно сложный вопрос ... причина этого в том, что есть несколько способов вызвать события.
1) __EVENTTARGET (как упомянуто выше) 2) Если ваша кнопка называется MyButt, вы увидите " MyButt = " в строке запроса. 3) Когда каждый элемент управления (например, TextBox, например) проверяет запрос, чтобы увидеть, отличается ли его значение в ViewState от отправленного, тогда " Text_Changed " будет стрелять.
Но вы можете использовать # 1 и # 2, чтобы проверить несколько мест.
Другие советы
К сожалению, запрос значения __EVENTTARGET не поможет. Часто это значение будет пустым. Обработка обратной передачи принимает некоторые решения о том, какие события вызывать, основываясь не только на целевом значении события (если оно есть), проверяя значения состояния элемента управления на значениях, публикуемых в форме (например, для текстового поля), определяет, следует ли инициировать такие события, как TextChanged. . р>
Кроме фактического подключения обработчика событий ко всем элементам управления, для которых вы хотите записывать события, я не думаю, что есть какой-либо способ определить его. Хотя, возможно, можно сделать в основном то, что делает фреймворк. Вам нужно будет сделать это между созданием элементов управления и восстановлением состояния представления, но до обработки опубликованных значений. Вы можете сравнить текущие контрольные значения (из viewstate) с опубликованными значениями, по сути, определяя, какие события будут запускаться.
Какова ваша цель с этим? Возможно, есть лучшее решение.
Следующее содержит искаженный идентификатор для кнопки при нажатии.
Page.Request.Form["__EVENTTARGET"]
Вот пример , который, как я считаю, отвечает на ваши вопросы. вопрос.
Другим способом было бы просто установить некоторые точки останова при отладке.