views:

277

answers:

2

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

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

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

i can workAround this by adding the parent control ID

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

On which Page life cycle are the Client IDs generated?

+5  A: 

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.

baretta
this works great only when no <% %> code blocks exist
Oscar Cabrero
+1  A: 

You should be able to add the attribute during OnPreRender(). INamingContainer is so painful sometimes...

Travis
this solution works for me since i was having <% %> code blocks and does not allow me to add the created control to this.ControlsThanks
Oscar Cabrero