2015-10-28 103 views
1

根據某些條件動態創建的表格,我動態添加了imagebutton。並行地我想添加這個圖像按鈕點擊事件,但點擊事件沒有被解僱。這是我的代碼片段。動態創建的圖片按鈕點擊事件未被觸發

private void createTable() 
    { 
     TableRow tableRow = new TableRow(); 
     TableCell ImageCell = new TableCell(); 
     ImageButton imgBtndeleteAttr = new ImageButton(); 
     imgBtndeleteAttr.ID = "imgbtn_" + i.ToString() + j.ToString(); 
     imgBtndeleteAttr.CssClass = "deleteDynamic"; 
     imgBtndeleteAttr.OnClientClick = "javascript:return confirm('Do you want to delete this Attribute?');"; 
     imgBtndeleteAttr.Click += new System.Web.UI.ImageClickEventHandler(imgBtndeleteAttr_Click); 
     ImageCell.Controls.Add(imgBtndeleteAttr); 
     tableRow.Cells.Add(ImageCell); 
    } 

這裏是事件

protected void imgBtndeleteAttr_Click(object sender, ImageClickEventArgs e) 
    { 

     ClientScript.RegisterClientScriptBlock(this.GetType(), "lnk", 
      "<script type = 'text/javascript'>alert('Image button Clicked');</script>"); 
    } 
+1

你是否在'Page.IsPostBack'上調用'createTable()'?所有動態創建的控件必須在回發後**重新創建**,否則它們不存在並且不創建事件處理程序 – freefaller

+0

no。我不能調用的Page.IsPostBack或頁面加載createTable()因爲表和controlls想要基於用戶選擇參數 – Jzl

+0

生成如果只會有**一個**動態項目,然後只是創建它,並正常在標記中設置Visible =「false」',那麼你可以在代碼中將其更改爲'.Visible = true;'。如果有多個,那麼你處於一個痛苦的世界,我沒有時間來解釋 – freefaller

回答

1

它是一個壞主意,使用動態控件在ASP。控件必須在回發時重新創建。所以如果你動態地創建一個按鈕並點擊它,回發就會發生並且事件被觸發,但是由於回發觸發事件的按鈕被銷燬並且拋出了引發的事件。

+0

然後我可以知道如何處理這種類型的asp.net進程。如果我們想創建和實現一些動態控制手段,那麼實現它的最好方法是什麼? – Jzl

+0

有沒有乾淨的方式來處理這個問題。你必須事先創建控件並設置Visible = false。否則,如果創建按鈕的條件是數據驅動的,我會使用數據列表 –

+0

在我的情況下,數據驅動是不可能的。也是數據主義者。我不能隱藏在頁面加載控制。因爲它應該根據用戶輸入生成。如果還有其他方法可以做到這一點。 – Jzl

相關問題