Определите, какая кнопка внутри пользовательского элемента управления отправила событие - PullRequest
1 голос
/ 18 ноября 2008

У меня есть пользовательский элемент управления с несколькими кнопками.

На page_load я хочу запустить метод, если не была нажата определенная кнопка.

Когда я проверяю отправителя на page_load внутри пользовательского элемента управления, я просто получаю имя пользовательского элемента управления, а не саму кнопку.

Есть ли способ определить, какая кнопка была нажата на page_load? В противном случае мне придется придумать какой-нибудь хакерский метод для решения проблемы.

Ответы [ 4 ]

2 голосов
/ 18 ноября 2008

Я думаю, вы можете проверить Request.Form ("__EVENTTARGET") - это должно содержать ClientID вашего контроля.

Это относится к значению скрытого поля, которое среда обработки событий ASP.NET использует для отслеживания того, что пользователь нажал. Когда пользователь запускает постбэк, некоторый JavaScript на странице устанавливает в этом скрытом поле значение ClientID элемента управления, который вы щелкнули перед отправкой формы.

0 голосов
/ 11 февраля 2009

Вот простой способ проверить, была ли нажата определенная кнопка:

protected bool isButtonClicked(string buttonName)
    {
        bool isClicked = false;
        foreach (string ctl in this.Request.Form)
        {
            if (ctl.EndsWith(buttonName))
            {
                isButtonClicked = true;
                break;
            }
        }
        return isClicked;
    } 
0 голосов
/ 18 ноября 2008

Вы уверены, что правильно обрабатываете модель страницы? Происходит событие Page Load (для построения объектной модели на стороне сервера), затем ваш элемент управления будет обрабатывать событие нажатия кнопки, привязанное к элементу управления.

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

А как насчет кнопок в других элементах управления на странице?

Иногда есть веские причины для этого, но я также беспокоюсь, что вы просто взламываете модель страницы ASP.NET.

0 голосов
/ 18 ноября 2008

Можете ли вы создать свойство в вашем пользовательском элементе управления, чтобы возвращать нажатую кнопку (или устанавливать флаг или что-то еще), устанавливать его в каждом событии нажатия кнопки внутри пользовательского элемента управления?

...