2012-07-10 52 views
0

任何幫助,將不勝感激 -添加控制/事件有關的動態不起作用

這裏是我的aspx代碼 -

<div id="div_Detail" class="div_det" runat="server" /> 

,並在我後面的代碼 -

protected void Page_Load(object sender, EventArgs e) { 
    LoadDetail(); 
} 

private void LoadDetail() { 
    HtmlTable tbl = new HtmlTable(); 
    HtmlTableRow row = new HtmlTableRow(); 
    HtmlTableCell cell = new HtmlTableCell(); 

    Button bUpdate = new Button(); 
    bUpdate.Text = "Update"; 
    bUpdate.Click += this.Update_Click; 

    cell.Controls.Add(bUpdate); 
    row.Cells.Add(cell); 
    tbl.Rows.Add(row); 
    div_Detail.Controls.Add(tbl); 
} 

private void Update_Click(object sender, EventArgs e) { 
    //Do something 
} 

我使用正確的文本查看頁面上的按鈕。但是單擊該按鈕時,Update_Click從不會被調用。

我錯過了什麼嗎?

回答

2

嘗試給按鈕一個ID。 .NET引擎在回發期間需要在控件上使用ID來將控件與給定的事件委託相關聯。

編輯:

此代碼工作正常:

protected void Page_Load(object sender, EventArgs e) { 
     LoadDetail(); 
    } 

    private void LoadDetail() { 
     HtmlTable tbl = new HtmlTable(); 
     HtmlTableRow row = new HtmlTableRow(); 
     HtmlTableCell cell = new HtmlTableCell(); 

     Button bUpdate = new Button(); 
     bUpdate.Text = "Update"; 
     bUpdate.Click += this.Update_Click; 
     bUpdate.ID = "btnID"; 

     cell.Controls.Add(bUpdate); 
     row.Cells.Add(cell); 
     tbl.Rows.Add(row); 
     div_Detail.Controls.Add(tbl); 
    } 

    private void Update_Click(object sender, EventArgs e) { 
     //Do something 
    } 
+0

我添加了ID,但它仍然只是回來與的IsPostBack =真實的Page_Load。它沒有得到事件。 – duckmike 2012-07-10 13:22:46

+0

該代碼本身起作用,但不在我的應用程序中。我試圖簡化它的發佈目的,但基本上我有一個div,其中包含2個選項卡的選項卡容器。這些選項卡具有保存此按鈕所在表格的div。整個頁面中大約有3000行代碼。會有另一個原因,爲什麼這隻會回到Page_Load()? – duckmike 2012-07-10 13:34:39

+0

如果您擁有多個具有相同ID的控件,或者AJAX控件執行其他操作,那麼可能會妨礙您的操作。 – Josh 2012-07-10 13:37:03

1

給該按鈕的標識,一切都將正常工作。

bUpdate.Id = "btnUpdate";

1

試試這個可以幫助ü

bUpdate.Click += new System.EventHandler(this.bUpdate_OnClick); 

protected void bUpdate_OnClick(object sender, EventArgs e) { 


}