2012-03-27 41 views
2

而動態生成按鈕我有相關的按鈕ID並創建了一個按鈕的事件處理程序如下:動態生成的按鈕點擊不被調用?

btn.Click += new EventHandler(btn_Click); 

按鈕單擊事件:

protected void btn_Click(object sender,EventArgs e) 
{ 
    Button b = new Button(); 
    b = (Button)sender; 
    string i = b.ID.Substring(b.ID.Length - 1, 1); 
    int j1 =Convert.ToInt32(i); 
    id1 = to[j1]; 
    Page.ClientScript.RegisterClientScriptBlock(Type.GetType("System.String"), 
     "addScript", "PassValues('" + id1 + "')", true); 
    ScriptManager.RegisterStartupScript(this, this.GetType(), 
     "sendMessage", "javascript:sendMessage(); ", true); 
} 

但是這個事件不會得到所謂的我已經把所有的我的控件在一個UpdatePanel內

編輯:正在發生的事情是在按鈕上點擊某處某個功能正在調用哪些是目前在Page.Load

protected void getEntriesRight() 
{ 
    j = (int)Session["j"]; 

    int n1 = j + 3; 

    for (; j <= n1; j++) 
    { 
     if (j < fr.data.Length) 
     { 
      HtmlGenericControl listItem = new HtmlGenericControl("li"); 
      HtmlGenericControl a1 = new HtmlGenericControl("a"); 
      Label anchor = new Label(); 
      Image im = new Image(); 

      btn = new Button(); 
      im.ImageUrl = fr.data[j].pic_square; 
      im.Height = 45; 
      im.Width = 47; 


      btn.CssClass = "btn-add"; 
      btn.Text = "Invite"; 
      to[j] = fr.data[j].uid; 

      btn.ID = "btn" + j; 


      a1.Attributes.Add("href", "#"); 
      anchor.Text = fr.data[j].name; 
      a1.Controls.Add(btn); 
      a1.Controls.Add(im); 
      a1.Controls.Add(anchor); 
      listItem.Controls.Add(a1); 
      list.Controls.Add(listItem); 

       btn.Click += new EventHandler(btn_Click); 

     } 
    } 

    Session["j"] = j; 
} 

幫助!

+0

我們需要看看你是如何創建'btn' – 2012-03-27 18:11:15

回答

9

動態生成的控件必須在每次回傳時重新創建,以便觸發它們的事件。這是在.NET中以編程方式生成控件時最常遇到的問題之一,如果您能找到解決方法,則不鼓勵它。

例如,如果您有一個只有在單擊另一個按鈕時才存在的按鈕,請使頁面中的按鈕開始,然後使用Visible屬性來控制是否顯示該按鈕。


關於您的編輯。每回發到服務器,即使在UpdatePanel內,都會打電話給Page_Load。如果要檢測請求是否來自UpdatePanel,則在調用該函數之前,您需要檢查!Page.IsAsync

+0

那麼這不正是我現在正在發生的問題是另一種功能,而不是這種方法被稱爲我不知道爲什麼:/ – vini 2012-03-27 18:02:03

+0

看到我的文章更新。 – mellamokb 2012-03-27 18:12:29