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.**
}
试试这个
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命令。然后你甚至根本不需要回发到服务器。。。