2010-06-07 2 views
1

Я создаю элемент управления веб-сервера, на котором есть кнопка изображения. html для управления выполняется в RenderControls кода, управление devrives из 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); 

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

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

Любой может мне помочь?

Благодаря

ответ

1

При обратной передачи данных в ASP.NET, будут следовать различные фазы:

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

Во время фазы 3 (LoadPostData) framework реализует интерфейс IPostBackDataHandler для каждого элемента управления, который отправил данные.

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

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

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

+0

Поскольку кнопка находится в элементе управления веб-сервером, добавленном на главную страницу, как я могу использовать page_init? – MarkyMarc

+0

На самом деле после немного большего количества исследований я изменил свой серверный элемент управления, чтобы создать его дочерний элемент управления для события OnInit, и теперь он работает. Так что спасибо за то, что вы меня на правильном пути – MarkyMarc

+0

@MarkyMarc У меня такая же проблема. Что вы сделали точно? Не могли бы вы разместить полное решение для +1? Благодаря! – Rushino

1

WebControl должен быть создан и прикрепил обработчик событий после того, как событие страницы Load для обработки любого ввода от пользователя.
Вам следует попытаться создать 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); 
} 
+0

Спасибо за ваше предложение. Я пробовал это, и я получаю тот же результат. – MarkyMarc

1

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

img.ID = this.ClientID 

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

+0

Я попробовал статическое имя кнопки, то же самое. – MarkyMarc

Смежные вопросы