<p>i am programatically adding Webcontrols in to a User Control i am also adding a javascript event passing the controlID as a parameter but the clientID is the one i assigned a it does not contain the one that asp.net generates</p>

<pre><code>   var txt = new TextBox();
   txt.ID = "MyID"+Number;

   chkBox.Attributes.Add("onClick", "EnableTxtBox('" +txt.ClientID + "');");
</code></pre>

<p>i can workAround this by adding the parent control ID</p>

<pre><code>   chkBox.Attributes.Add("onClick", "EnableTxtBox('" + this.ClientID+"_"+txt.ClientID + "');");
</code></pre>

<p>On which Page life cycle are the Client IDs generated?</p>

You need to add the control to the control hierarchy before you add the attribute.
```
```
var txt = new TextBox();
   txt.ID = "MyID"+Number;
   Controls.Add ( txt );
   chkBox.Attributes.Add("onClick", "EnableTxtBox('" +txt.ClientID + "');");
```
```
ControlCollection is no ordinary collection; it notifies the owner control when controls are added, and the control can take appropriate actions.