我在网络表单中添加了一个动态创建的按钮。但它的点击事件不起作用。有人可以解释一下原因吗?
这是我的代码:
Button save = new Button();
save.ID = "btnSave";
save.Text = "Save";
save.Click += new System.EventHandler(this.Save_Click);
Webform.Controls.Add(save);
protected void Save_Click(object sender, EventArgs e)
{
Response.Redirect("Default.aspx");
}
它回到了同一页面。它没有重定向到Default.aspx。
答案 0 :(得分:4)
您的代码示例不够完整,无法进行诊断,但我会对其进行一次检查。
在页面生命周期的哪个阶段,您是否将按钮添加到页面?如果你在PreRender中这样做,那就是它无法正常工作的原因。你应该在Init期间这样做。
更新:
您无法在页面生命周期的Init阶段之后动态创建控件并使其正常工作,除非您每次都以相同的方式创建它。这是因为生命周期如下所示:
初始 - >加载ViewState - >页面加载 - >事件处理程序 - >的PreRender。
您正在创建一个按钮,并在第二个最后阶段为其提供事件处理程序。这意味着永远不会注册该按钮以将其与页面一起保存为ViewState,因此单击该按钮时,该按钮的所有状态都不会恢复 - 这意味着您指定的事件处理程序将消失,并且永远不会被调用。
我的建议是在页面上正常创建“保存”按钮(不是动态的),只需将其设置为Visible =“False”即可。然后,在第一个按钮的Click处理程序中,只需将Save按钮设置为Visible =“true”。
答案 1 :(得分:0)
您是否可以对此进行调试并确定代码是否会转到click事件,或者您的重定向是否存在问题? Womp是正确的,在Page_Init中绑定事件。