繁体   English   中英

按钮不以编程方式触发ASP.NET控件上的事件

[英]Button not firing event on ASP.NET control Programmatically

我正在ComboxChanged事件上创建一个Button,

    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.WriteResponse.Redirect 他们都没有,有效。 同一页面刷新。 有没有人有任何想法。

必须动态创建Button,因此我无法尝试Page_Init

我也尝试过CommandArgument事件也没有用。 任何想法。

作为山 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确定它正是你正在寻找的

  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

就这样 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM