2009-04-10 7 views
0

가 어떻게 동적으로 같은 aspx 페이지에 두 개의 웹 사용자 컨트롤을 추가 할 수 있습니다 의혹? 나는 'WebUserControl'를 입력 유형 'ASP.webusercontroladult_ascx'의 개체를 캐스팅 할 수ASP.NET은

수 없습니다 다음과 같은 오류가 그렇게 할 때. 내가 한 웹 사용자 컨트롤을 추가 할 수 있어요

동적

for (int i = 0; i < 2; i++) 
{ 
    Control uc = (WebUserControl)Page.LoadControl("WebUserControlAdult.ascx"); 
    Panel1.Controls.Add(uc); 
    Panel1.Controls.Add(new LiteralControl(@"<br />")); 
} 
+0

LOL. 왜 컨트롤을 동적으로 추가하려고합니까? forblock에 대해 대신 Repeater 컨트롤을 사용해 보셨습니까? –

+0

그래, 내가이 목적을 위해 리피터를 사용하고 싶습니다 – RobS

+0

리피터 컨트롤에 대해 자세히 설명해 주시겠습니까? –

답변

1

당신은 사용자 정의 컨트롤의 ID를 설정하는 시도? ie

Control uc = (WebUserControl)Page.LoadControl("WebUserControlAdult.ascx"); 
uc.id = "Dyn" + i.tostring(); 
Panel1.Controls.Add(uc); 

또는 잘못된 유형으로 변환되는 UserControl입니까? 어쩌면

(WebUserControlAdult)Page.LoadControl ... 
+0

ID를 설정하는 용도는 무엇입니까? –

+0

ID는 컨트롤을 고유하게 식별합니다. 전체 페이지에서 고유해야합니다. –

1

문제는 루프가 아닌 캐스트에있는 것으로 보입니다.

나는 귀하의 경우 명시 적 캐스트에 대한 요구 사항이 표시되지 않습니다. 당신은 단순히 다음과 같이 할 수 있습니다 :

for (int i = 0; i < 2; i++) 
{ 
    Control uc = Page.LoadControl("WebUserControlAdult.ascx"); 
    Panel1.Controls.Add(uc); 
    Panel1.Controls.Add(new LiteralControl(@"<br />")); 
} 

그리고 그렇게해야합니다. 그러나 WebUserControlAdult 클래스에 의해 노출 된 명시 적 속성을 설정해야하는 경우 캐스팅해야합니다. 이 경우 usercontrol 클래스 유형으로 캐스팅해야합니다 (@benophobia에서 설명한대로). 당신의 WebUserControl은 데이터 바인딩 된 컨트롤 인 경우

0

, 당신은 Repeater Controls 사용을 고려할 수 있습니다. 동적 사용자 컨트롤을 다루는 만, 예를 들어, 리피터의 ItemTemplate에 컨트롤을 넣어해야 리피터 컨트롤을 사용

,

<asp:Repeater ID="bunchOfControls" runat="server"> 
    <HeaderTemplate> 
     <ul> 
    </HeaderTemplate> 
    <ItemTemplate> 
     <li> 
      <namespace:WebUserControlAdult runat="server /> 
     </li> 
    </ItemTemplate> 
    <FooterTemplate> 
     </ul> 
    </FooterTemplate> 
</asp:Repeater> 
0

는 엉덩이에 통증이있을 수 있습니다.

동적 인 사용자 정의 컨트롤을 만들 때마다 ASP.net이 포스트 백에 다시 할당 할 수 있도록 ID를 설정해야하며 포스트 백 후에 컨트롤 값을 유지할 수 있도록해야합니다. Page_Init 이벤트의 사용자 컨트롤 이 도움이

희망. 제목에서