Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add control to the page programatically in page load?

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.

like image 988
Laziale Avatar asked Oct 13 '22 19:10

Laziale


1 Answers

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/>"));
}
like image 132
Oded Avatar answered Nov 15 '22 09:11

Oded