2008-11-18 9 views
5

jestem programowo dodając Webcontrols w celu kontroli użytkownika Jestem również dodanie javascript imprezę przekazując sterowania ustawiono jako parametr ale ClientID jest jeden i przypisano nie zawiera ten, który asp.net generujeW którym cyklu życia strony są generowane identyfikatory klientów?

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

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

mogę rozwiązać ten przez dodanie formantu nadrzędnego identyfikatora

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

na której stronie cyklu życia są identyfikatory klienta wygenerowany?

+0

Identyfikatory klientów są zdecydowanie jedną z najbardziej nieprzyjemnych rzeczy, z którymi można się uporać w formularzach internetowych, gdybym musiał podać tylko jeden argument, dlaczego struktura MVC jest znacznie lepsza niż formularze internetowe. argument, że dyktujesz ids nie zależy od ASP.net, aby przypisać cokolwiek to jest. –

Odpowiedz

7

Przed dodaniem atrybutu należy dodać kontrolkę do hierarchii kontroli.

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

ControlCollection nie jest zbiorem zwykłym; powiadamia kontrolkę właściciela o dodaniu kontrolek, a kontrola może podjąć odpowiednie działania.

+0

działa to doskonale tylko wtedy, gdy nie ma bloków kodu istnieje –

2

Powinieneś być w stanie dodać atrybut podczas OnPreRender(). INamingContainer jest czasami tak bolesny ...

+0

to rozwiązanie działa dla mnie, ponieważ miałem <% %> bloków kodu i nie pozwala mi dodać utworzonej kontroli do this.Controls Dzięki –

Powiązane problemy