См .:
Как ASP.NET
распознает элемент управления, отвечающий за обработку обратной передачи?Когда никакие элементы управления, на которые есть ссылки в теле запроса, не реализуют интерфейс IPostBackEventHandler
, класс страницы ищет скрытое поле __EVENTTARGET
, если оно есть.Предполагается, что содержимое поля является ID
элемента управления, вызвавшего обратную передачу.Если этот элемент управления реализует интерфейс IPostBackEventHandler
, вызывается метод RaisePostbackEvent
.
это здесь - Клиентская сторона страниц ASP.NET .
Итак, на стороне клиента __EVENTTARGET
- это все, что вам нужно.На стороне сервера вы можете переопределить метод Page.RaisePostBackEvent
(это защищенный метод, поэтому вы можете наследовать от System.Web.UI.Page
class):
protected override void RaisePostBackEvent(IPostBackEventHandler sourceControl,
string eventArgument)
{
// sourceControl is a control that caused postback
base.RaisePostBackEvent(sourceControl, eventArgument);
}
или выполнить то же самое без наследования:
var controlName = page.Request.Params["__EVENTTARGET"];
Control postbackControl = null;
if (!string.IsnullOrEmpty(controlName))
{
postbackControl = this.Page.FindControl(controlName);
}
РЕДАКТИРОВАТЬ: относительно комментария автора к моему ответу: если значение __EVENTTARGET
является пустой строкой, кажется, вы получаетеэто значение до того, как оно было установлено в функции __doPostBack
.Таким образом, обходной путь может заключаться в переопределении функции __doPostBack
или аналогичном способе;Вы можете найти пример этого в этом SO вопросе .