EventHandler为null

时间:2009-09-11 12:04:32

标签: c# asp.net events user-controls raise

我正在尝试从用户控件中引发单击事件并在包含页面上处理它。我遇到的问题是,当我点击用户控件上的'imgstep1'按钮时,imgstep1_click事件后面的代码会触发,但'btnHandler'事件总是为空。因此它不会调用父事件。

对此的任何帮助将不胜感激。

我的用户控制代码是:

.ascx代码:

<asp:ImageButton ImageUrl="./images/step1.gif" 
        ID="imgstep1" runat="server" 
         OnClick="imgstep1_Click"/>

.ascx.cs代码:

    public delegate void OnImageButtonClick();
    public event OnImageButtonClick btnHandler;

    protected void imgstep1_Click(object sender, ImageClickEventArgs e)
    {
        if (btnHandler != null)
            btnHandler();
    }

.aspx页码:

protected void Page_Load(object sender, EventArgs e)
{
     ucStepHdr.btnHandler += new StepsHeader.OnImageButtonClick(ucStepHdr_btnHandler);
}

void ucStepHdr_btnHandler()
{
  Response.Write ('test');
}

3 个答案:

答案 0 :(得分:11)

代码看起来很简单,可以正常工作。 btnHandler为null的唯一原因可能是因为未调用aspx页面中的事件注册代码。

有回帖吗?你确定你在页面加载时每次添加事件???

ucStepHdr.btnHandler += new StepsHeader.OnImageButtonClick(ucStepHdr_btnHandler);

答案 1 :(得分:1)

如果删除OnClick="imgstep1_Click"并将其放入ascx.cs

protected ImageButton imgstep1;

protected override void OnInit(EventArgs e)
{
    this.imgstep1.Click += new ImageClickEventHandler(imgstep1_Click);
}

这种连接事件的方法是否有效?

答案 2 :(得分:0)

它看起来应该可以工作......你可以单步执行调试器中的代码,并在Page_Load中设置它后立即查看ucStepHdr.btnHandler的值是什么? (暂且不说,传统上这些是在init中设置而不是加载,但这不是你的问题。)