簡體   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