请告诉我以下代码有什么问题?
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个新按钮,分配事件。实际上,它创建了按钮,但是当我点击它们时没有任何反应。我猜这些事件无法注册。我在这里做错了什么?
答案 0 :(得分:6)
发生这种情况的原因是因为Page
是一个无状态类,一旦它呈现所有内容,它就会被销毁。因此,一旦你有回发,这个信息就会丢失,你的Page
类不知道按钮的事件,因为动态按钮不是aspx
文件的一部分。
您需要维护一组您可能在会话中创建的动态控件,以便在回发后重新创建它们。有一个it here的例子。
答案 1 :(得分:0)
如何使用event:
在asp.net中创建多个控件string[] arg = new string[10];
protected void Page_Load(object sender, EventArgs e)
{
for (int i = 0; i < 10; i++)
{
LinkButton bb = new LinkButton();
arg[i]= bb.ID = "bb" + i.ToString();
bb.Text = "like"+"<br/>";
Panel1.Controls.Add(bb);
bb.Click += new EventHandler(bb_Click);
}
}
void bb_Click(object sender, EventArgs e)
{
LinkButton btn = (LinkButton)sender;
for (int j = 0; j < 10; j++)
{
if (btn.ID == arg[j])
{
btn.Text = "";
btn.Text = "unlike";
Response.Write(arg[j]);
}
}
}
此代码将打印在页面加载事件中在运行时创建的每个按钮ID。