2010-12-19 9 views
5

Próbuję dodać formanty do strony z kodem tyle w fazie ładowania strony tak:Jak dodać kontrolę do strony programowo przy ładowaniu strony?

foreach (FileInfo fi in dirInfo.GetFiles()) 
{ 
    HyperLink hl = new HyperLink(); 
    hl.ID = "Hyperlink" + i++; 
    hl.Text = fi.Name; 
    hl.NavigateUrl = "../downloading.aspx?file=" + fi.Name + "&user=" + userIdpar; 
    Page.Controls.Add(hl); 
    Page.Controls.Add(new LiteralControl("<br/>")); 
} 

Błąd które otrzymuję jest Page.Controls.Add(hl) A oto wyjaśnienie:

Kolekcja kontrolna nie może być modyfikowana podczas faz DataBind, Init, Load, PreRender lub Unload.

Co mogę zrobić, aby rozwiązać ten problem? Z góry dziękuję.

Odpowiedz

4

Utwórz własną kolekcję kontenerów i dodaj je do niej, zamiast bezpośrednio do kolekcji kontrolek stron.

Na .aspx:

<asp:Panel id="links" runat="server" /> 

W kodzie tyłu (Proponuję za pomocą programu obsługi zdarzeń Init zamiast obciążenie strony):

foreach (FileInfo fi in dirInfo.GetFiles()) 
{ 
    HyperLink hl = new HyperLink(); 
    hl.ID = "Hyperlink" + i++; 
    hl.Text = fi.Name; 
    hl.NavigateUrl = "../downloading.aspx?file=" + fi.Name + "&user=" + userIdpar; 
    links.Controls.Add(hl); 
    links.Controls.Add(new LiteralControl("<br/>")); 
} 
+0

Dzięki za szybką odpowiedź, bardzo mi to pomogło. Wesołych świąt! – Laziale

0

Dodaj swoje kontrole do Init() zdarzenia strony.

+3

przeczytać pytanie. W tekście błędu występuje słowo "Init" jako jedno z miejsc, w których nie jest to możliwe. – Oded

Powiązane problemy