2008-11-18 8 views
5

i estoy añadiendo programáticamente WebControls en un control de usuario i también estoy añadiendo un evento javascript pasar el ID del control como un parámetro pero el ClientID es el que asignaron una que no contiene el que asp.net genera¿En qué ciclo de vida de página se generan los ID de cliente?

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

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

puedo solucionar este añadiendo el ID de control de los padres

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

en qué ciclo de vida Página se generan los ID de cliente?

+0

Los Ids de cliente son, con mucho, uno de los aspectos más desagradables para tratar en formularios web, si tuviera que hacer un solo argumento de por qué el framework MVC es sustancialmente mejor que los webforms sería este argumento de que usted dicta los identificadores no depende de ASP.net para asignar lo que se siente. –

Respuesta

7

Debe agregar el control a la jerarquía de control antes de agregar el atributo.

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

ControlCollection no es una colección normal; notifica al propietario el control cuando se agregan los controles, y el control puede tomar las medidas adecuadas.

+0

esto funciona muy bien solo cuando no existen bloques de código –

2

Debería poder agregar el atributo durante OnPreRender(). INamingContainer es tan doloroso a veces ...

+0

esta solución funciona para mí ya que tenía bloques de código <% %> y no me permite agregar el control creado a este. Controles Gracias –

Cuestiones relacionadas