【问题标题】:Dynamically assign button events in c# asp.net在 c# asp.net 中动态分配按钮事件
【发布时间】:2011-08-21 19:28:24
【问题描述】:

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

        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 个分配了事件的新按钮。确实,它创建了按钮,但是当我单击它们时,什么也没有发生。我猜这些事件无法注册。我在这里做错了什么?

【问题讨论】:

  • 我们可以看看 btn_click 代码吗?
  • 你能告诉我们btn_click的代码吗?
  • 当然。我现在正在编辑
  • 完成,但请记住,问题是事件没有被触发。

标签: c# asp.net dynamic button click


【解决方案1】:

发生这种情况的原因是因为Page 是一个无状态类,一旦它渲染了所有内容,它就会被销毁。因此,一旦您进行回发,此信息就会丢失,并且您的Page 类不知道按钮的事件,因为动态按钮不是aspx 文件的一部分。

您需要维护您已创建的动态控件的集合(可能在会话中),以便在回发后重新创建它们。有一个it here的例子。

【讨论】:

  • 例如这些按钮需要在回发时重新创建,否则它们不存在,因此事件连接也不存在。
  • 没错。尽管 ASP.NET 开发在创建和操作对象方面与 WinForms 类似,但思维过程却大不相同,很容易忘记 Web 的无状态特性。
  • 好的,谢谢 :) 我在创建按钮后创建了一个缓存,如果找到有问题的缓存,它会在 page_init 事件中重新创建按钮。现在,它正在工作!再次感谢!
【解决方案2】:

如何在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。

【讨论】:

    猜你喜欢
    • 2013-05-10
    • 2011-05-01
    • 1970-01-01
    • 2022-10-15
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多