2008-11-18 48 views
5

我正在編程添加器WebControls在一個用戶控制我也加入使控件ID爲參數的JavaScript事件但ClientID的是一個我分配一個它不包含asp.net生成哪個頁面生命週期是生成的客戶端ID?

var txt = new TextBox(); 
    txt.ID = "MyID"+Number; 

    chkBox.Attributes.Add("onClick", "EnableTxtBox('" +txt.ClientID + "');"); 
所述一個

我可以通過將母體控制ID

chkBox.Attributes.Add("onClick", "EnableTxtBox('" + this.ClientID+"_"+txt.ClientID + "');"); 

哪個網頁上的生命週期中生成的客戶ID替代方法呢?

+0

客戶端ID是迄今爲止在webforms中處理最令人討厭的事情之一,如果我僅僅爲了說明爲什麼MVC框架比webforms更好一個參數就是這樣論證你決定不依賴於ASP.net的ID來分配任何感覺。 – 2008-11-18 22:38:23

回答

7

在添加屬性之前,需要將控件添加到控件層次結構中。

var txt = new TextBox(); 
    txt.ID = "MyID"+Number; 
    Controls.Add (txt); 
    chkBox.Attributes.Add("onClick", "EnableTxtBox('" +txt.ClientID + "');"); 

ControlCollection不是普通的集合;它會在添加控件時通知所有者控件,並且控件可以採取適當的操作。

+0

這個工程很好,只有當沒有<% %>代碼塊存在 – 2008-11-18 23:14:14

2

您應該可以在OnPreRender()期間添加該屬性。 INamingContainer有時是很痛苦的...

+0

這個解決方案適用於我,因爲我有<% %>代碼塊,並且不允許我將創建的控件添加到this.Controls 謝謝 – 2008-11-18 23:50:25