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

Sha*_*kan 2 c# asp.net dynamic click button

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

        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
}
Run Code Online (Sandbox Code Playgroud)

上面的代码是在用户表单中单击按钮后立即发生的.它应该创建2个新按钮,分配事件.实际上,它创建了按钮但是当我点击它们时没有任何反应.我猜这些事件无法注册.我在这做错了什么?

key*_*rdP 6

发生这种情况的原因是因为它Page是一个无国籍的阶级,一旦它呈现一切,它就会被摧毁.因此,一旦你有回发,这个信息就会丢失,你的Page班级不知道按钮的事件,因为动态按钮不是aspx文件的一部分.

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