Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / WebForms: Как узнать какая кнопка вызвала PostBack до вызова обработчика OnClick? / 7 сообщений из 7, страница 1 из 1
15.11.2012, 11:02
    #38039325
Сирин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebForms: Как узнать какая кнопка вызвала PostBack до вызова обработчика OnClick?
Отключён JS, __eventtarget пустой. Пользователь нажал кнопку, которая сабмитит форму, т. е. происходит PostBack. Где-то в недрах иерархии контролов внутри одного из Page_Load нужно определять, какая из кнопок была нажата, при этом OnClick ещё не выполнился.

ASP.NET 4.0.
...
Рейтинг: 0 / 0
15.11.2012, 13:28
    #38039651
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebForms: Как узнать какая кнопка вызвала PostBack до вызова обработчика OnClick?
В пейдж лоаде:

Код: c#
1.
2.
var all = new [] { btn1.ClientID, btn2.ClientID, btn3.ClientID };
var buttonId = Request.Form.AllKeys.SingleOrDefault(key => all.Count(item => key.Replace('$', '_').Contains(item)) > 0);
...
Рейтинг: 0 / 0
15.11.2012, 13:39
    #38039677
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebForms: Как узнать какая кнопка вызвала PostBack до вызова обработчика OnClick?
В принципе, есть и другой способ - чистый хак. Так как нет гарантии, что сабмитовый айдишник должен быть всегда последним в коллекции Request.Form.AllKeys.

Код: c#
1.
2.
3.
4.
if (Request.Form.AllKeys.Length > 0)
{
    var buttonFakeId = Request.Form.AllKeys[Request.Form.AllKeys.Length - 1];
}
...
Рейтинг: 0 / 0
15.11.2012, 13:45
    #38039692
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebForms: Как узнать какая кнопка вызвала PostBack до вызова обработчика OnClick?
В копилку:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
public  Control GetPostBackControl(Page page)
{
    Control control = null;

    string ctrlname = page.Request.Params.Get("__EVENTTARGET");
    if (ctrlname != null && ctrlname != string.Empty)
    {
        control = page.FindControl(ctrlname);
    }
    else
    {
        foreach (string ctl in page.Request.Form)
        {
            Control c = page.FindControl(ctl);
            if (c is System.Web.UI.WebControls.Button)
            {
                control = c;
                break;
            }
        }
    }
    return control;
}
...
Рейтинг: 0 / 0
15.11.2012, 13:50
    #38039704
Сирин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebForms: Как узнать какая кнопка вызвала PostBack до вызова обработчика OnClick?
Принцип понятен -- обход коллекции Form и поиск ключа по вхождению ID кнопки.
...
Рейтинг: 0 / 0
15.11.2012, 14:27
    #38039811
iConst
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebForms: Как узнать какая кнопка вызвала PostBack до вызова обработчика OnClick?
Код: c#
1.
if (!string.IsNullOrEmpty(ctrlname))
...
Рейтинг: 0 / 0
15.11.2012, 15:15
    #38039913
Сирин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebForms: Как узнать какая кнопка вызвала PostBack до вызова обработчика OnClick?
iConst
Код: c#
1.
if (!string.IsNullOrEmpty(ctrlname))


Тоже видел тот код с инди-стайл проверкой на null и пустоту :)
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / WebForms: Как узнать какая кнопка вызвала PostBack до вызова обработчика OnClick? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]