我在用户控件中编写了事件,并且该用户控件在页面中使用了两次。现在的问题是,我第二次将事件视为null。为什么?如何解决这个问题?请帮忙。
我的代码如下:
在ascx中:
public delegate void OnGoButtonClick();
public event OnGoButtonClick btnGoClickHandler;
protected void btnGo_Click(object sender, EventArgs e)
{
if (btnGoClickHandler != null)
btnGoClickHandler();
}
在aspx中:
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
MyUserControl.btnGoClickHandler += new UserControls.LoanPicker.OnGoButtonClick(PopulateDataOnGo);
}
但对于第二个用户控件,它始终为空。
答案 0 :(得分:0)
确保从两个控件订阅该事件。
关于你的评论:
如何检测被触发的用户控件
您需要将引发事件的对象提供给事件处理程序。首先将代理签名更改为:
public delegate void OnGoButtonClick(object sender);
public event OnGoButtonClick btnGoClickHandler;
protected void btnGo_Click(object sender, EventArgs e)
{
if (btnGoClickHandler != null)
btnGoClickHandler(this);
}
现在更改事件处理程序,在这种情况下似乎PopulateDataOnGo
接受sender
并检查是谁从那里引发了事件:
public void PopulateDataOnGo(object sender)
{
if (sender is ControlType1)
{
}
else if (sender is ControlType2)
{
}
}