JavaScript: определить, какой элемент управления вызвал обратную передачу - PullRequest
1 голос
/ 08 апреля 2011

В настоящее время я занимаюсь разработкой веб-сайта с использованием ASP.NET 3.5.На странице есть несколько ситуаций, в которых я не хочу, чтобы определенный элемент управления вызывал обратную передачу на сервер.Я написал функцию, которая возвращает false, если выполняется это условие, которое будет вызываться при наступлении события onsubmit-Event.Но мне как-то нужно определить, какой элемент управления вызовет обратную передачу, потому что обратную передачу следует отменить только в том случае, если этот определенный элемент управления вызвал ее при определенных условиях.Как это можно сделать?

Спасибо за ваше время.

Ответы [ 2 ]

2 голосов
/ 08 апреля 2011

См .:

Как 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 вопросе .

0 голосов
/ 08 апреля 2011

Вы можете использовать ScriptManager.GetCurrent().AsyncPostBackSourceElementID, чтобы найти элемент управления, который вызвал обратную передачу на страницу.

Подробнее о MSDN , но он будет работать в следующих случаях:

  • Обратная передача от элемента управления, внутри элемента управления UpdatePanel которого Свойство ChildrenAsTriggers установлено в true (по умолчанию).

  • Обратная передача от элемента управления, которая является триггером для элемента управления UpdatePanel.

  • Обратная передача от элемента управления, который зарегистрирован путем вызова RegisterAsyncPostBackControl метод элемента управления ScriptManager.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...