有人可以向我解释一下吗?我正在编写一个非常简单的Web表单(C#aspx),并且正在使用动态按钮。我创建了第一个按钮并向其中添加了click事件-没问题-一切正常。但是,当我在第一个按钮的事件处理程序中创建第二个动态按钮时,无法向其添加事件处理程序。我的意思是我可以-没有错误-但我永远都无法达到它。
在下面的代码中-当我加载页面时-我看到一个按钮。我单击它-并添加了一个新按钮。我单击第二个按钮-它什么也不做。 (?)
protected void Page_Load(object sender, EventArgs e)
{
// on PageLoad I create a dynamic button named b1
Button b1 = new Button();
b1.Text = "new 1";
b1.Click += new EventHandler(b1_Click);
div_data.Controls.Add(b1);
// div_data is just a HTML div tag
}
void b1_Click(object sender, EventArgs e)
{
// when I click dynamid button b1 - a new dynamic button b2 is created
Button b2 = new Button();
b2.Text = "new 2";
b2.Click += new EventHandler(b2_Click);
div_data.Controls.Add(b2);
}
void b2_Click(object sender, EventArgs e)
{
//this code is never executed... why ???
}
感谢您的建议-如果是菜鸟问题,则表示抱歉;-)
答案 0 :(得分:0)
所有控件和所有其他对象都放置在页面生命周期的结尾。
这意味着您必须在回发时重新创建它们。您已经在Button
中的按钮Page_Load
上执行了此操作,但没有使用在第一手按钮的事件处理程序中创建的按钮b2
。
但是真正的问题是:为什么需要动态创建它们? 以声明方式(在aspx-markup上)创建它们,并根据需要使它们可见/不可见。