5

I am trying to add controls to the page from the code behind in the page load stage like this:

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

The error which I am getting is on Page.Controls.Add(hl) and here is the explanation:

The control collection cannot be modified during DataBind, Init, Load, PreRender or Unload phases.

What can I do to fix this issue? Thanks in advance.

famousgarkin
  • 13,687
  • 5
  • 58
  • 74
Laziale
  • 7,965
  • 46
  • 146
  • 262

2 Answers2

4

Create your own container collection and add these to it, instead of directly to the page controls collection.

On .aspx:

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

In code behind (I suggest using the Init event handler rather than page load):

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/>"));
}
Oded
  • 489,969
  • 99
  • 883
  • 1,009
-1

Add your controls into Init() event of Page.

breez
  • 494
  • 2
  • 13
  • 3
    Read the question. The error text mentions `Init` as one of the places this is not possible. – Oded Dec 19 '10 at 20:13