我正在尝试从用户控件引发一个单击事件,并在包含它的页面上处理它。我遇到的问题是,当我单击用户控件上的按钮'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');
}发布于 2009-09-11 12:21:38
代码看起来足够简单,可以正常工作。btnHandler为空的唯一原因可能是因为aspx页中的事件注册码未被调用。
有回帖吗?是否确实要在每次加载页面时添加事件?
ucStepHdr.btnHandler += new StepsHeader.OnImageButtonClick(ucStepHdr_btnHandler);发布于 2009-09-11 12:38:34
如果您删除OnClick="imgstep1_Click"并将其放入您的ascx.cs
protected ImageButton imgstep1;
protected override void OnInit(EventArgs e)
{
this.imgstep1.Click += new ImageClickEventHandler(imgstep1_Click);
}这种连接事件的方法有效吗?
发布于 2009-09-11 12:08:36
看起来应该行得通..。您是否可以在调试器中单步执行代码,并在Page_Load中设置ucStepHdr.btnHandler的值后立即查看它的值?(顺便说一下,传统上这些都是在init中设置的,而不是load,但这不是您的问题。)
https://stackoverflow.com/questions/1410475
复制相似问题