Обработчик событий UserControl не запускается
Я динамически загружаю 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 ответа
Я думаю, что это не стрельба, потому что вы загружаете элемент управления в событие prerender вашей страницы. При обратной передаче элемент управления теряется, поскольку для него нет состояния просмотра. Поэтому нет никакого контроля, чтобы запустить его событие. Попробуйте загрузить элемент управления в событие инициализации страницы. Дайте нам знать, что происходит!
Обработка события обратной передачи выполняется перед рендерингом, поэтому в вашем случае элемент управления отсутствует на странице.
События жизненного цикла запускаются в следующем порядке (пропущено несколько):
- В этом
- нагрузка
- PreRender
- разгружать
А обработка событий выполняется между Load и PreRender (если некоторые события изменяют способ отображения страницы, это имеет смысл).
Так что просто переместите ваш код, который загружает элемент управления Retry, в Load или Init.
Элемент управления должен быть изначально видимым, чтобы иметь возможность войти в событие OnPreRender. но, может быть, вы хотите, чтобы это было невидимым. обязательно иметь EnableViewState = false;
Похоже, что элемент управления не добавляется после каждого поста назад, я бы вынул оператор if на странице aspx, чтобы увидеть, решает ли это проблему... я предполагаю, что Retry - это кнопка?