2008-11-18 4 views
5

i programmatisch bin Hinzufügen WebControls in Steuerung in einem User-i bin auch ein JavaScript-Ereignis den controlID als Parameter Zugabe vorbei, aber die clientID ist der, den ich ein ihm zugeordneten enthält nicht die eine, die asp.netAuf welchem ​​Seitenlebenszyklus werden die Client-IDs generiert?

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

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

ich kann diese Problemumgehung die ID Elternkontrolle durch das Hinzufügen

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

Auf dem Zyklus Seite Leben sind die Client-IDs generiert?

+0

Client-IDs sind bei weitem eines der widerlichsten Dinge in Webforms, wenn ich nur ein Argument machen musste, warum das MVC-Framework wesentlich besser ist als Webforms, wäre es das Argument, dass Sie die IDs diktieren nicht abhängig von ASP.net zu zuweisen, was auch immer es sich anfühlt. –

Antwort

7

Sie müssen das Steuerelement der Steuerungshierarchie hinzufügen, bevor Sie das Attribut hinzufügen.

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

ControlCollection ist keine gewöhnliche Sammlung; Es benachrichtigt die Eigentümersteuerung, wenn Steuerelemente hinzugefügt werden, und das Steuerelement kann entsprechende Maßnahmen ergreifen.

+0

das funktioniert nur, wenn keine <% %> Code-Blöcke existieren –

2

Sie sollten das Attribut während OnPreRender() hinzufügen können. INamingContainer ist manchmal so schmerzhaft ...

+0

diese Lösung funktioniert für mich, da ich <% %> Code-Blöcke hatte und erlaubt mir nicht, das erstellte Steuerelement zu diesem hinzuzufügen.Steuerelemente Danke –

Verwandte Themen