События в моих динамически загружаемых пользовательских элементах управления не запускаются в веб-приложении ASP.NET - PullRequest
1 голос
/ 18 января 2012

У меня есть веб-приложение ASP.NET, которое содержит MasterPage, страницу ASPX, где я динамически загружаю пользовательские элементы управления в UpdatePanel, содержащую PlaceHolder на основе выбора меню. Это отлично работает. Проблема в том, что в моих пользовательских элементах управления нет событий .. У меня есть разные сценарии:

  1. DropDownList, где выбранное значение должно загружать разные пользовательские элементы управления
  2. LinkButton, где событие Click должно загрузить другой UserControl в PlaceHolder (на родительской странице).

Я потратил 3 дня на это сейчас и перепробовал несколько вещей для этого .... Зарегистрированные события, среди прочего использованный интерфейс ....

но пока ничего не получалось :( .. спасибо за любую помощь, которую я могу получить.

Да, я пробовал событие Page_PreInit в пользовательском элементе управления. Единственное, что срабатывает, когда я щелкаю свой LinkButton (или DropDownList) в моем пользовательском элементе управления, это событие Page_Load на родительской странице ... и тогда PlaceHolder, содержащий пользовательский элемент управления (я нажимаю), имеет Contol.Count = null Вот код

//Page_Load on parent page:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            LoadDefaultControl(ctrlPlaceHolder, Base_Path + "_Services.ascx");
        }
    }

// Page_Load в моем пользовательском контроле

protected void Page_Load(object sender, EventArgs e)
    {
        btJoomlaManagement.Click += btJoomlaManagement_Click;
    }

PlaceHolder на родительской странице находится внутри UpdatePanel >> ContentTemplate.

               <asp:UpdatePanel ID="pnlControlContainer" runat="server" UpdateMode="Conditional">
                <ContentTemplate>
                    <asp:PlaceHolder ID="ctrlPlaceHolder" runat="server" EnableViewState="False" />
                </ContentTemplate>
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="menuServices" />
                </Triggers>
            </asp:UpdatePanel>

Поведение следующее: когда я загружаю свой USerControl Page_Load с событием Click, запускается ... когда я нажимаю кнопку Link в моем usercontrol, запускается Page_Load на родительской странице, но не мой метод Click в моем usercontrol. Пользовательский контроль (который я только что нажал на кнопку Link) исчезает.

Так что мое событие (щелчок) не запускается ... надеюсь, вы понимаете немного лучше.

Ответы [ 3 ]

2 голосов
/ 19 января 2012

Вам необходимо заново создавать динамический элемент управления для каждой отдельной обратной передачи, помните, что экземпляр Page создается для каждого запроса; если вы не создадите заново элемент управления, его не будет в PostBack.

Конечно, ваш контроль исчезает, вы не воссоздали его на обратной передаче.

см. здесь

Извлечение :

Динамически добавленные элементы управления должны программно добавляться в Интернет. страница на каждом посещении страницы. Лучшее время для добавления этих элементов управления находится на этапе инициализации жизненного цикла страницы, который происходит до стадии состояния просмотра нагрузки. То есть мы хотим иметь иерархия управления завершена до того, как наступит этап состояния просмотра нагрузки. По этой причине лучше всего создать обработчик событий для страницы. событие Init класса в вашем классе code-behind и добавьте вашу динамику контролирует там.

0 голосов
/ 19 января 2012

Мне кажется, что проблема в порядке прикрепления событий.

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

Вы должны попытаться прикрепить обработчик в page_init.Я попробовал с небольшим примером и работает как шарм.

Дайте нам знать, если это решило вашу проблему

0 голосов
/ 18 января 2012

Вы пытались вложить событие в событие Page_Init вместо Page_Load? Так я делаю назначение событий в своих приложениях с динамическим управлением, у меня не было проблем с этим. Кроме того, вы упоминаете, что это делается в UpdatePanel, это в шаблоне контента? Если да, добавляете ли вы к нему соответствующие триггеры (если действительно хотите, чтобы это происходило AJAX-способом)?

Вы устанавливаете для свойства autopostback значение true?

Просмотр некоторого кода определенно поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...