ASP.NET Click事件不适用于在选项卡按钮控件中创建的多按钮

本文关键字:按钮 控件 创建 选项 Click NET 事件 不适用 适用于 ASP | 更新日期: 2023-09-27 18:20:52

我是ASP.NET新手,遇到了一个问题。。

在我的代码中,顺便说一句。单击事件不适用于在选项卡按钮控件中创建的多个按钮。你们能给我建议吗?谢谢,

<asp:Button Text="TAB MENU" BorderStyle="None" ID="Tab" CssClass="Initial" runat="server" OnClick="Tab_Click" />
<asp:Panel ID="panel1" runat="server" Direction="LeftToRight" HorizontalAlign="Left"></asp:Panel>


protected void Tab_Click(object sender, EventArgs e) {
     foreach (...) {
            Button btn = new Button();                        
            btn.Click += Button1_Click;
            panel1.Controls.Add(btn);
            }
}
protected void Button1_Click(object sender, EventArgs e) {
            **some code here! but does not work.**
}

ASP.NET Click事件不适用于在选项卡按钮控件中创建的多按钮

试试这个

Button btn = new Button(); 
btn.Click  += new RoutedEventHandler(Button1_Click);
panel1.Controls.Add(btn);

您的问题可能在于触发Button1_Click回调时按钮不存在。。。Asp.net网络表单在HTTP上是一个有点漏洞的抽象,因此有时很难解读,但我预计发生的情况是,当点击按钮回发时,按钮实际上并不存在于控件树中,因为只有在点击选项卡控件时,该按钮才会添加到控件树中。因此,由于回发中不存在该按钮,webforms不知道该如何处理该事件,因此它忽略了它…

如果你的按钮必须是动态创建的,可以考虑让它们做一些javascript来编辑一些隐藏字段或其他什么,你可以在Page_Load方法中检查它的值,然后用这个值做任何你想做的功能。

如果它们不是动态的,而是对于每个页面加载都是相同的(但对于每个选项卡都不同——即,当页面加载时,您从数据库中绘制一些信息来决定显示哪些按钮,但这不会在同一页面的回发与回发之间发生变化),然后考虑在Page_Load事件中创建按钮,而不是在创建选项卡时引发的事件中创建。

另外,既然你在评论中建议按钮将用于打开一个新窗口,为什么不让按钮在客户端执行呢,即使用javascript window.open命令。然后你甚至根本不需要回发到服务器。。。