【发布时间】:2011-05-14 23:57:42
【问题描述】:
我有一个 C# Web 应用程序,它有一个托管用户控件 (Review.ascx) 的 aspx 页面。在该用户控件内还有 5 个用户控件,其中一个具有公共事件 (Review_Summary.ascx)。问题是无论我做什么,我都无法在父 ascx 控件 (Review.ascx) 中连接事件。
这是我在子控件中的内容 (Review_Summary.ascx)
public event EventHandler forwardStatusChanged;
#region methods
protected void btnForward_Click(object sender, EventArgs e)
{
if (btnForward.Text == "Return")
{
if (forwardStatusChanged != null)
{
forwardStatusChanged(sender, e);
}
removeForward();
}
}
在父控件 (Review.ascx) 我有这个
public void initReview(string EmployeeNumber)
{
RevSummary.forwardStatusChanged += new EventHandler(RevSummary_forwardStatusChanged);
<more code here>
}
protected void RevSummary_forwardStatusChanged(object sender, EventArgs e)
{
lblReadOnly.Visible = false;
}
RevSummary是父控件中子控件的ID。 InitReveiw 是 aspx 页面在其 Page_Load 事件中调用的方法。
我在编译或运行时都没有错误。但是当我单击按钮时,forwardStatusChanged 事件为空。之后调用的“removeForward()”方法正确执行。因此,事件始终为空的事实使我相信父控件中的连接不起作用。但是,我确信它正在执行,因为执行之后的所有代码。
我怎样才能弄清楚为什么这个事件没有连接起来?
【问题讨论】:
-
您需要在页面生命周期的早期绑定您的事件。当它们被绑定时,事件管道已经确定该事件没有事件处理程序。
-
我应该在什么时候绑定它们?在 Page_Init 上?还是 Page_PreInit?或者还有什么地方?
-
我试过初始化。 PreInit 在用户控件中不可用。我还注意到,如果我单击按钮两次,事件就会正确触发。所以它需要两次回发才能工作。
-
尝试初始化。它适用于第二次回发的事实让我想知道您是否将它放在 a: if (IsPostBack){ // register event }