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

标签 c# asp.net dynamic button click

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

        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/

相关文章:

c# - 用于比较具有复杂实体的两个列表的 LINQ

c# - ASP.NET 自从从 SQL 切换到 Access DB 后,我无法让我的数据源/ GridView 运行

c# - 将动态数据类型传递给函数

c++ - 赋值运算符和条件语句

c - 结构体数组中矩阵的动态内存分配

c# - Visual Studio 2015 预览版中缺少报告模板

c# - 如何对被测方法中声明的变量的属性进行单元测试

c# - 确保所有线程都关闭或强行关闭一个线程?

c# - 按 C# 中的日期属性或使用 jQuery 拆分列表

ASP.NET Web API 2 文件上传