Обработчик событий UserControl не запускается - PullRequest
6 голосов
/ 27 апреля 2009

Я динамически загружаю UserControl в View, который находится в элементе управления MultiView. Хотя UserControl добавляет обработчик события, событие никогда не запускается.

Что мне здесь не хватает? Спасибо!

Содержит страницу ASPX:

protected override void OnPreRender(EventArgs e)
{
    if (MultiView1.ActiveViewIndex == 2) //If the tab is selected, load control
    {
        Control Presenter = LoadControl("Presenter.ascx");
        (MultiView1.ActiveViewIndex.Views[2].Controls.Add(Presenter);
    }
    base.OnPreRender(e);
}

Presenter.ascx.cs

override protected void OnInit(EventArgs e)
{
    Retry.Click += this.Retry_Click; //This is a .Net 2.0 project
    base.OnInit(e);
}


protected void Retry_Click(object sender, EventArgs e)
{
    //This never fires
}

Ответы [ 4 ]

8 голосов
/ 27 апреля 2009

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

6 голосов
/ 27 апреля 2009

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

События жизненного цикла запускаются в следующем порядке (пропущено несколько):

  1. Init
  2. Load
  3. PreRender
  4. Выгрузка

А обработка событий выполняется между Load и PreRender (если некоторые события изменяют способ отображения страницы, это имеет смысл).

Так что просто переместите ваш код, который загружает элемент управления Retry, в Load или Init.

Ссылка: Обзор жизненного цикла страницы Asp.Net

2 голосов
/ 11 декабря 2013

Элемент управления должен быть изначально видимым, чтобы иметь возможность войти в событие OnPreRender. но, может быть, вы хотите, чтобы это было невидимым. обязательно иметь EnableViewState = false;

1 голос
/ 27 апреля 2009

Похоже, что элемент управления не добавляется после каждого поста назад, я бы вынул оператор if на странице aspx, чтобы узнать, решает ли это проблему ... я предполагаю, что Retry - это кнопка?

...