2010-12-19 17 views
5

Estoy intentando agregar controles a la página del código detrás en la etapa de carga de la página así:¿Cómo agregar el control a la página programáticamente en la carga de la página?

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/>")); 
} 

el error que estoy recibiendo es en Page.Controls.Add(hl) y aquí está la explicación:

La recopilación de control no se puede modificar durante las fases DataBind, Init, Load, PreRender o Unload.

¿Qué puedo hacer para solucionar este problema? Gracias por adelantado.

Respuesta

4

Crea tu propia colección de contenedores y agrégala a ella, en lugar de directamente a la colección de controles de página.

En .aspx:

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

En código detrás (se sugiere emplear el controlador de Init evento en lugar de carga de la página):

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

Gracias por su rápida respuesta, me ayudó mucho. ¡Felices vacaciones! – Laziale

0

Agregue sus controles al evento Init() de Página.

+3

leer la pregunta. El texto de error menciona 'Init' como uno de los lugares en los que esto no es posible. – Oded

Cuestiones relacionadas