【问题标题】:Button not firing event on ASP.NET control Programmatically以编程方式在 ASP.NET 控件上的按钮未触发事件
【发布时间】:2014-05-20 23:35:55
【问题描述】:

我正在为 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.WriteResponse.Redirect 我都试过了。他们都没有,工作。 同一页面被刷新。有没有人有任何想法。

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

我也尝试过同样不起作用的 CommandArgument 事件。 任何想法。

【问题讨论】:

  • 它甚至会点击按钮点击事件吗?
  • 我猜这不会发生。但是根据代码不知道为什么。看来是对的。
  • 您是否在每次回发时重新创建按钮?
  • 创建部分在,comboBox Change事件。所以我没有想法。是否会再次创建?
  • 点击后按钮会在页面上消失吗?如果是,则不会重新创建它。应该这样做才能使 Click 事件起作用。

标签: c# asp.net events button


【解决方案1】:

当您添加您的动态事件处理程序时,它将存储特定的控制视图状态,因此当页面回发发生时,它将丢失该事件处理程序,因此您可以实现页面事件代码附带的加载视图状态方法应该像

protected override void LoadViewState(object savedState)
    {
        base.LoadViewState(savedState);

    } 

【讨论】:

  • 感谢您的回答,但我仍然看不到任何事情发生。一样的效果。??
【解决方案2】:

试试这个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);

【讨论】:

  • 注意。页面刷新,既不响应也不重定向
【解决方案3】:

假设这是创建按钮的代码:

 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

就是这样:)

【讨论】:

  • 您的代码看起来更像我的代码,但在 VB.net 中。你能用C#做吗?抱歉问的太多了
【解决方案4】:

正如 Mt. Schneiders 在他的 cmets 中在您的问题下提到的那样 - 如果您向页面动态添加控件,您必须在回发时重新添加它。仅仅因为您已将其添加为事件处理程序的一部分,并不意味着 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 life cyclePage_Init 阶段创建的)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 2013-07-02
    • 2016-08-02
    • 2013-08-09
    • 1970-01-01
    相关资源
    最近更新 更多