你能告诉我下面的代码有什么问题吗?
Panel div = new Panel();
Button btn1 = new Button { Text = "Delete", CommandArgument = "argument", ID = "remove" };
Button btn2 = new Button { Text = "Insert", CommandArgument = "argument2", ID = "insert" };
btn1.Click += new EventHandler(btn_click);
btn2.Click += new EventHandler(btn_click);
div.Controls.Add(btn1);
div.Controls.Add(btn2);
ph_plan.Controls.Add(div); // where ph_plan is a placeholder in the user control
protected void btn_click(object sender, EventArgs e)
{
Button btn = (Button)sender;
if(btn.ID == "remove")
// do this
else
// do that
}
上面的代码在单击用户表单中的按钮后立即发生。它应该创建 2 个分配了事件的新按钮。事实上,它创建了按钮,但是当我单击它们时什么也没有发生。我猜这些事件无法注册。我在这里做错了什么?
最佳答案
发生这种情况的原因是因为 Page
是一个无状态类,一旦它渲染了所有内容,它就会被销毁。因此,一旦进行回发,此信息就会丢失,并且您的 Page
类不知道按钮的事件,因为动态按钮不是 aspx
文件的一部分。
您需要维护已创建的动态控件的集合(可能是在 session 中),以便可以在回发后重新创建它们。有一个例子 it here .
关于c# - 在c# asp.net中动态分配按钮事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5939313/