c# - 来自动态按钮的动态按钮
问题描述
有人可以向我解释一下吗?我正在编写一个非常简单的 Web 表单(C# aspx)并且我正在使用动态按钮。我创建了第一个按钮并向其添加了单击事件-没问题-一切正常。但是当我在我的第一个按钮的事件处理程序中创建第二个动态按钮时 - 我无法向它添加事件处理程序。我的意思是我可以——没有错误——但我永远也达不到。
在下面的代码中 - 当我加载页面时 - 我看到一个按钮。我单击它 - 并添加了一个新按钮。我单击第二个按钮 - 它什么也没做。(?)
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 ???
}
感谢您的建议-如果这是一个菜鸟问题,对不起;-)
解决方案
所有控件和所有其他对象都在页面生命周期结束时处理。这意味着您必须在回发时重新创建它们。您已经在为按钮执行此操作Button
,Page_Load
但不是使用b2
在第一个按钮的事件处理程序中创建的按钮。
但真正的问题是:为什么需要动态创建它们?以声明方式创建它们(在 aspx 标记上)并根据需要使它们可见/不可见。
推荐阅读
- google-apps-script - 降级后升级到 Apps Script 新 IDE
- ms-word - 在设计模板时,如何创建一个虚拟文本,就像微软原始模板中的那些?
- tensorflow - InvalidArgumentError:缩减轴 0 在形状 [0] 中为空
- python - Twitch api 访问令牌问题
- node.js - 无法安装 vue-cli,找不到匹配的版本
- javascript - 如何使用异步函数作为 jest.mock 的第二个参数?
- javascript - 在使用 Js 的 Click 事件之后,从 forEach 循环中获取特定值
- mysql - 字符串、字符串(255)还是 VARCHAR(255)?
- c++ - 哪些 OpenSSL 可以加密这样的字符串?
- javascript - 尝试使用 JavaScript 从 azure 获取访问令牌时无法加载响应数据