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
  • 12,308
  • 5
  • 52
  • 71
Laziale
  • 7,259
  • 39
  • 131
  • 229

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
  • 463,167
  • 92
  • 837
  • 979
0

Add your controls into Init() event of Page.

breez
  • 496
  • 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