On which Page life cycle are the Client IDs generated?
Asked Answered
O

2

6

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?

Olericulture answered 18/11, 2008 at 22:34 Comment(1)
Client Ids are by far one of the most obnoxious things to deal with in webforms, if I had to make solely 1 argument of why the MVC framework is substantially better than webforms it would be this argument that you dictate the ids not depend on ASP.net to assign whatever it feels like.Pentapody
U
8

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.

Unfamiliar answered 18/11, 2008 at 22:57 Comment(0)
B
2

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

Braggart answered 18/11, 2008 at 23:13 Comment(1)
this solution works for me since i was having <% %> code blocks and does not allow me to add the created control to this.Controls ThanksOlericulture

© 2022 - 2024 — McMap. All rights reserved.