ASP.NET 控件上的按钮未触发事件 以编程方式
本文关键字:事件 编程 方式 控件 NET 按钮 ASP | 更新日期: 2023-09-27 17:57:13
我正在ComboxChanged
事件上创建一个按钮,
Button btn = new Button();
btn.ID = "btnNum1";
btn.Text = "Edit";
btn.Click += btnTest_Click;
pnl.Controls.Add(btn);
事件代码如下
public void btnTest_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
Response.Write(btn.ID);
Response.Redirect("Page2.aspx");
}
我已经尝试过,Response.Write
和Response.Redirect
.他们都不起作用。同一页面将刷新。有没有人有任何想法。
按钮必须动态创建,因此我无法尝试Page_Init
我也尝试了CommandArgument事件,但也没有工作。任何想法。
正如 Mt. Schneiders 在您的问题下的评论中提到的那样 - 如果您动态地将控件添加到页面,则必须在回发时重新添加它。 仅仅因为已将其添加为事件处理程序的一部分,并不意味着 ASP.NET 自动在回发时创建控件。
您需要在页面中存储控件已创建的事实 - 我个人的偏好是将代码放在它自己的函数中并设置一个ViewState
值......
private void CreateButton()
{
Button btn = new Button();
btn.ID = "btnNum1";
btn.Text = "Edit";
btn.Click += btnTest_Click;
pnl.Controls.Add(btn);
ViewState["buttonAdded"] = true;
}
并从ComboxChanged
事件调用该函数。
然后,在Page_Load
上,您需要检查该按钮之前是否添加过...
protected void Page_Load(object sender, EventArgs e)
{
if(Page.IsPostBack && ViewState["buttonAdded"] != null)
{
CreateButton()
}
}
(注意,我已经声明Page_Load
而不是Page_Init
,因为ViewState
不是在 ASP.NET 页面生命周期的Page_Init
阶段创建的)
当您添加动态事件处理程序时,它将存储特定的控件视图状态,因此当页面回发发生时,它将丢失该事件处理程序,因此您可以实现加载视图状态方法,该方法将随页面事件一起提供 代码应该像
protected override void LoadViewState(object savedState)
{
base.LoadViewState(savedState);
}
试试这个btn.Click += new EventHandler(btnTest_Click);
。
Button btn = new Button();
btn.ID = "btnNum1";
btn.Text = "Edit";
btn.Click += new EventHandler(btnTest_Click);
pnl.Controls.Add(btn);
假设这是创建按钮的代码:
If ddl.SelectedIndex > 0 Then
Dim b As New Button
b.ID = "mybutton"
b.Text = "i'm a button"
panel.Controls.Add(b)
AddHandler b.Click, AddressOf Button_Click
End If
请注意,AddHandler ok,这正是您正在寻找的
Private Sub Button_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim b As Button = CType(sender, Button)
Dim l As Label = CType(Me.FindControl("testlabel"), Label)
l.Text = b.Text & " my id is " & b.ID.ToString
End Sub
仅此而已:)