在c#asp.net中动态分配按钮事件

你能告诉我以下代码有什么问题吗?

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文件的一部分。

您需要维护一组您可能在会话中创建的动态控件,以便在回发后重新创建它们。 这里有一个例子。

如何使用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"+"
"; 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。