所以这是我的控件布局,我删除了表的格式,什么不是。我遇到的问题是事件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刷新。我想要做的事情不应该是复杂的,但结果却比预期更令人头疼。
答案 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