2010-12-19 6 views
5

내가 이런 식으로 페이지로드 단계에서 뒤에 코드에서 페이지에 컨트롤을 추가하려고 :페이지로드시 프로그래밍 방식으로 페이지에 컨트롤을 추가하는 방법은 무엇입니까?

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

여기 Page.Controls.Add(hl)에 있고 점점 오전 오류입니다 설명 :

컨트롤 컬렉션은 DataBind, Init, Load, PreRender 또는 Unload 단계에서 수정할 수 없습니다.

이 문제를 해결하려면 어떻게해야합니까? 미리 감사드립니다.

답변

4

컨테이너 컬렉션을 직접 만들고 페이지 컨트롤 컬렉션에 직접 추가하는 대신 컨테이너 컬렉션을 추가하십시오. .ASPX에

:

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

뒤에 코드에서 (필자는 Init 이벤트 처리기가 아닌 페이지로드 사용하는 것이 좋습니다) :

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

답장을 보내 주셔서 감사합니다. 즐거운 휴일! – Laziale

0

컨트롤을 페이지의 Init() 이벤트에 추가하십시오.

+3

질문을 읽고 있습니다. 오류 텍스트는 'Init'가 불가능한 장소 중 하나라고 언급합니다. – Oded

관련 문제