子用户控件不会触发其已注册的事件

时间:2011-04-05 21:08:02

标签: asp.net events user-controls updatepanel repeater

所以这是我的控件布局,我删除了表的格式,什么不是。我遇到的问题是事件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();
    }

现在在我的usercontrol 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始终为null。我不知道为什么或者我做错了什么。当我进入InterventionLayout.LoadAssignedInterventionData()时,我知道它在控件中设置。然后当我在btnSave_Click InterventionSaved中设置断点时始终为空。

我的主要目标是能够通知父母并运行其NonAcademicInterventionSaved()方法。从那里我想最终导致updatepanel刷新。我想要做的事情不应该是复杂的,但结果却比预期更令人头疼。

2 个答案:

答案 0 :(得分:0)

您可能必须在回发后重建InterventionLayouts的转发器集合,以便ASP.NET可以匹配事件。

答案 1 :(得分:0)

找到答案: button event in nested repeater

确保将其添加到onItemCreated

@ user655810:但这正是你的情况。嵌套转发器中的Usercontrol并相信我,它的工作原理;)你在哪里添加处理程序?您必须在嵌套转发器的ItemCreated中添加它,就像在我的示例中一样,而不是在ItemDataBound中(ItemCreated在每次回发时都被调用,而不是ItemDataBound)。 - Tim Schmelter 3月18日16:23