2008-11-18 5 views
5

je suis programatically ajoutais WebControls pour un contrôle utilisateur J'ajoute également un événement javascript qui passe le controlID comme paramètre mais le clientID est celui que j'attribué une ne contient pas celui qui asp.net génèreSur quel cycle de vie de page les identifiants de client sont-ils générés?

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

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

je peux contourner le problème en ajoutant le contrôle parent ID

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

sur quel cycle de vie page sont les ID des clients générés?

+0

Les ID clients sont de loin l'une des choses les plus désagréables à traiter dans les formulaires Web, si je devais faire seulement 1 argument de pourquoi le cadre MVC est nettement mieux que les formulaires Web ce serait ce L'argument selon lequel vous dictez les ID ne dépend pas d'ASP.net pour attribuer ce que l'on ressent. –

Répondre

7

Vous devez ajouter le contrôle à la hiérarchie de contrôle avant d'ajouter l'attribut.

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

ControlCollection n'est pas une collection ordinaire; il avertit le contrôle du propriétaire lorsque des contrôles sont ajoutés, et le contrôle peut prendre les mesures appropriées.

+0

cela fonctionne très bien seulement quand aucun <% %> blocs de code existent –

2

Vous devriez pouvoir ajouter l'attribut pendant OnPreRender(). INamingContainer est si douloureux parfois ...

+0

cette solution fonctionne pour moi puisque j'avais des blocs de code <% %> et ne me permet pas d'ajouter le contrôle créé à this.Controls Merci –

Questions connexes