События на элементах управления в веб-сервере управления - PullRequest
1 голос
/ 07 июня 2010

Я создаю элемент управления веб-сервера, на котором есть кнопка с изображением. HTML-код для элемента управления выполняется в RenderControls кода, элемент управления лишен из WebControl, IScriptControl, INamingContainer.

Кнопка кодируется в RenderControls следующим образом:

System.Web.UI.WebControls.ImageButton img = new System.Web.UI.WebControls.ImageButton();
img.ImageUrl = "Url of the image";
img.Click += new ImageClickEventHandler(img_Click);
img.ID = this.ClientID + "_img";
img.CausesValidation = false;
imgLock.RenderControl(output);

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

Этот серверный элемент управления находится на главной странице.

Кто-нибудь может мне помочь в этом?

Спасибо

Ответы [ 3 ]

1 голос
/ 07 июня 2010

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

img.ID = this.ClientID

... выглядит странно. Замените его на img.ID = "MyButtonID" или что-то в этом роде.

1 голос
/ 07 июня 2010

Когда вы отправляете данные в asp.net, будут следовать разные фазы:

1.Initialization, 2.LoadViewState 3.LoadPostData 4.ObjectLoad

На этапе 3 (LoadPostData) платформа будет реализовывать интерфейс IPostBackDataHandler на каждом элементе управления, отправляющем данные.

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

Это означает, что вам нужно создать элемент управления до того, как Asp.net достигнет стадии (LoadPostData).

Я предлагаю создать элемент управления в Page_Init, в этом случае вы не потеряете события, например. (Нажмите).

1 голос
/ 07 июня 2010

WebControl должен быть создан и иметь прикрепленные обработчики событий после события загрузки страницы для обработки любого ввода от пользователя.
Вы должны попытаться создать ImageButton, настроить обработчики событий и добавить его в коллекцию Controls в переопределенном методе OnLoad.

 protected override void OnLoad(EventArgs e)  
 {
     System.Web.UI.WebControls.ImageButton img = new System.Web.UI.WebControls.ImageButton();
     img.ImageUrl = "Url of the image"; 
     img.Click += new ImageClickEventHandler(img_Click); 
     img.ID = this.ClientID + "_img"; 
     img.CausesValidation = false;
     this.Controls.Add(img);
 }
...