ASP.NET Web Forms всегда создает форму, которая включает все элементы управления на странице. Всякий раз, когда пользователь нажимает элемент управления на странице, которая запускает событие на сервере, то, что происходит за кулисами, заключается в том, что форма отправляется на сервер. Вместо того, чтобы делать простой POST, сообщение выполняется клиентской стороной __doPostback
, которая получает два параметра: eventTarget
и eventArgument
. Первый имеет идентификатор элемента управления, который запускает обратную передачу, а второй содержит дополнительную информацию.Параметры этих параметров копируются в два скрытых поля в форме, которые размещаются вместе с остальными элементами формы.
После того, как на сервере значения в этих элементах управления можно прочитать, чтобы определить, какое событие будет поднято. Они могут быть прочитаны с помощью доступа к Request["__EVENTTARGET"];
и Request["__EVENTARGUMENT"];
Вы можете прочитать SO Q & A, и связанные страницы, чтобы узнать больше об этом: How to use __doPostBack()
Рамки ASP.NET упрощает работу, исследуя эти значения , и ищет элемент управления, идентификатор которого соответствует __EVENTTARGET
, и реализует IPostBackEventHandler. Чтобы узнать больше об этом, вы должны прочитать: Server Event Handling in ASP.NET Web Forms Pagess.
Помимо событий с обратной передачей, есть также «события изменения». Эти события поднимаются путем сравнения исходного значения элемента управления, когда оно было отправлено в браузер, и значения, размещенного в этом элементе управления. Например, TextBox
имеет событие TextChanged
. Чтобы определить, нужно ли инициировать событие, сервер выдает исходное значение элемента управления из состояния представления (скрытое поле, которое было отправлено в браузер, с состоянием всех элементов управления с красным цветом, включая их значения) и сравнивает его с выведенное значение, при необходимости инициируя событие. Аналогично IPostBackEventHandler
реализация IPostBackDataHandler позволит платформе искать элементы управления, которые должны обрабатывать такие события.
Вы также должны понимать жизненный цикл страницы, чтобы узнать, что происходит на сервере, и в каком порядке: When to wire up event handlers asp.net
Какое событие вы бы хотели уволить? Только щелчок имеет смысл в описанном сценарии, и именно так знает сервер. –
Как сказал @zespri, нет другого события, к которому вы можете подключить его. Кнопка linkbutton также имеет командное событие, но нажимаются кнопки и команды - события на стороне сервера при нажатии. – Esko
В этом случае да, но если бы у меня был пользовательский элемент управления, для которого более 1 событие имело бы смысл на стороне клиента, как бы это сделать? Должен ли я затем передавать информацию о том, какое событие нужно запустить в eventargs при вызове doPostBack? – user107986