c# - 动态创建的按钮单击事件未触发

标签 c# asp.net

我对此做了一些研究,但我发现的所有解决方案似乎都无法解决我的问题。我在 C# 中有一个 asp.net web 应用程序,我想在从下拉列表中进行选择后动态添加一个提交按钮。

protected void Page_Load(object sender, EventArgs e)
{
    submitButton.Text = "Submit";
    submitButton.ID = "submitButton";
    submitButton.Click += new EventHandler(submitButton_Click);

    SelectionDropDownList.SelectedIndexChanged += new EventHandler(SelectionDropDownList_SelectedIndexChanged);

}


protected void SelectionDropDownList_SelectedIndexChanged(object sender, EventArgs e)
{
    switch (SelectionDropDownList.SelectedIndex)
    {
        case 1:
            //does a redirect
            break;
        case 2:
            Panel1.Controls.Add(submitButton);
            break;
        case 3:
            //does a redirect
            break;
    }
}

protected void submitButton_Click(object sender, EventArgs e)
{
    //can't get this event to fire.
    SubmitSearch();
}

最佳答案

这是一个时间问题。你的程序流程是这样的:

  • Page_Load 已执行,页面已呈现。
  • 已选择下拉菜单。回发被发送到服务器。 Page_Load 被执行。然后事件被发送到您的下拉实例。执行 SelectedIndexChanged。您的按钮已创建,页面已呈现并发送给客户端。
  • 按钮被按下。回发被发送到服务器。 Page_Load 被执行。 Asp 尝试执行该事件,但该按钮不再存在。因此该事件被忽略。

这是 Webforms 令人讨厌的细节之一,也是不使用它的一个很好的理由 - 如果您可以自由选择的话。如果你必须使用它,http://msdn.microsoft.com/en-us/library/ms178472.aspx可能会有帮助。

关于c# - 动态创建的按钮单击事件未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7164628/

相关文章:

java - 使用选择排序方法对二维数组进行排序并将结果写入文件

c# - 快速回收字符串内存(RAM 有限的设备)

c# - 在 Vista 上设置文件夹权限

asp.net - 使用 Cookie 身份验证的 asp net core 项目 MVC Controller 和使用 Bearer 的 api 端点

c# - 外键关系不会出现在带有 mysql 数据库的 edmx 中,带有带有数据库的 asp mvc

MySQL数据库与ASP.NET全局连接

c# - 在 Winforms RichTextBox 控件中,如何使最后一行链接下方的空间不可单击?

c# - 我无法在调用的委托(delegate)中捕获异常

asp.net - 在 asp.net 上为 CKEditor 启用图像上传

c# - 如何为模板化日志目的设计数据库?