динамическое событие кнопки asp c # в пользовательском классе - PullRequest
1 голос
/ 01 октября 2009

Я создаю динамическую кнопку в пользовательском классе за пределами кода .aspx. Пользовательский класс создает объект Table и генерирует столбец Buttons внутри этой таблицы. После создания таблица загружается в элемент управления заполнителя. Все хорошо работает, кроме этой проблемы:

Как программно назначить объекту Button событие 'Click' в пользовательском классе?

 MyButton.Click += new EventHandler(MyButtonClick);

Это приводит к: «Имя« MyButtonClick »не существует в текущем контексте» ошибка.

Я знаю, что он не существует в текущем контексте, но после рендеринга страницы aspx в codebehind будет включен метод для обработки MyButtonClick. Я не знаю, как сохранить имя метода события Click в объекте Button из пользовательского класса и передать его в aspx-код для визуализации.

Ответы [ 2 ]

4 голосов
/ 01 октября 2009

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

РЕДАКТИРОВАТЬ: Те же принципы применяются к пользовательскому классу.

Контрольный код сзади:

public delegate void ButtonEventHandler();
public event ButtonEventHandler ButtonEvent;

protected void Button1_Click(object sender, EventArgs e)
{
    ButtonEvent();
}

.ASPX Код сзади:

protected override void OnInit(System.EventArgs e)
{               
     control1.ButtonEvent+= 
              new Control1.ButtonEventHandler (whatever_ButtonEvent);

}

protected void whatever_ButtonEvent()
{
    //do something
}
1 голос
/ 09 апреля 2010

Давайте возьмем эту концепцию и применим ее к пользовательскому элементу управления с текстовым полем и двумя кнопками. Пользовательский элемент управления размещен в Gridview. Когда мой код запускает метод в моем методе обработчика событий всегда имеет значение null. Я думаю, что это связано с тем, что кнопка находится в пользовательском элементе управления, который находится в виде сетки.

Вот мой код управления пользователем.

открытый частичный класс User_Controls_GridViewFilter: System.Web.UI.UserControl {

public event EventHandler UserControlButtonClicked;

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        renderPage();
    }
}



private void OnUserControlButtonClick()
{
    if (UserControlButtonClicked != null)
    {
        UserControlButtonClicked(); 
    }
}

protected void btnSearch_Click(object sender, EventArgs e)
{
    OnUserControlButtonClick();
}

protected void btnReset_Click(object sender, EventArgs e)
{
    OnUserControlButtonClick();
}

}

Я регистрирую элемент управления на странице aspx.

        ((User_Controls_GridViewFilter)gvMapLayer.HeaderRow.FindControl("FilterBox1")).UserControlButtonClicked
          += new ButtonEventHandler(User_Controls_GridViewFilter_UserControlButtonClicked);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...