Дочерний пользовательский элемент управления не запускает зарегистрированное событие - PullRequest
0 голосов
/ 06 апреля 2011

Итак, вот мое расположение элементов управления, я удалил форматирование таблиц, а что нет. У меня проблема в том, что событие InterventionSaved всегда равно нулю.

<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="rptAreaConcern_ItemDataBound">
    <ItemTemplate>
        <asp:UpdatePanel ID="updIntervenion" runat="server">
            <ContentTemplate>
                 <UC:InterventionLayout ID="InterventionLayout" runat="server"/>
            </ContentTemplate>
        </asp:UpdatePanel>
    </ItemTemplate>
</asp:Repeater>

В коде страницы я пытаюсь зарегистрировать событие InterventionLayout.InterventionSaved для каждого элемента в repeater1.

   protected void rptAreaConcern_ItemDataBound(Object Sender, RepeaterItemEventArgs e)
            {
                        InterventionLayout InterventionLayout = ((InterventionLayout)e.Item.FindControl("InterventionLayout"));
                        //InterventionLayout.ProgressMonitor = ddlProgressMonitoringOwner;  //tried to pass the drop 
                        //InterventionLayout.ProgressMonitorDuration = ddlDuration;   //down lists to the control(fail)
                        InterventionLayout.InterventionSaved += new EventHandler(NonAcademicInterventionSaved);
                        InterventionLayout.LoadAssignedInterventionData();
    }


   private void NonAcademicInterventionSaved(object sender, EventArgs e)
    {
       //this never gets called
       //ParentSave();
       //UpdatePanel();
    }

Теперь в моем пользовательском контроле InterventionLayout.ascx.cs У меня есть кнопка сохранения, которая вызывает Save_Clicked(object sender, EventArgs e)

У меня есть четное определение:

public event EventHandler InterventionSaved;

        protected void btnSave_Click(object sender, EventArgs e)
        {
            Save();
            if(null != InterventionSaved) // this is always null
               InterventionSaved(this, new EventArgs()); 
        }

InterventionSaved всегда равно нулю. Я не знаю почему или я делаю что-то не так. Я знаю, что это установлено в элементе управления, когда я вхожу в InterventionLayout.LoadAssignedInterventionData(). Затем, когда у меня установлена ​​точка останова в btnSave_Click InterventionSaved, она всегда равна нулю.

Моя главная цель - иметь возможность уведомить родителя и запустить его NonAcademicInterventionSaved() метод. Оттуда я хотел бы в конечном итоге обновить панель обновления. То, что я пытаюсь сделать, не должно быть сложным, но оказалось, что это скорее головная боль, чем ожидалось.

Ответы [ 2 ]

0 голосов
/ 07 апреля 2011

Нашел ответ: событие кнопки во вложенном повторителе

Убедитесь, что он добавляется в onItemCreated

@ user655810: но это именно ваш случай. Пользовательский контроль во вложенном репитере и, поверьте мне, он работает;) Где вы добавили обработчик? Вы должны добавить его в ItemCreated вложенного повторителя, как в моем примере, а не в ItemDataBound (ItemCreated вызывается при каждой обратной передаче в отличие от ItemDataBound). - Тим Шмельтер 18 марта в 16: 23

0 голосов
/ 06 апреля 2011

Возможно, вам придется перестроить коллекцию ретрансляторов InterventionLayouts после обратной передачи, чтобы ASP.NET мог сопоставить события.

...