2009-04-10 13 views
0

同じaspxページに2つのWebユーザーコントロールを動的に追加するにはどうすればよいですか?私はそれをしようとすると、私は次のエラーが表示されますASP.NET疑問

タイプ 'ASP.webusercontroladult_ascx'のオブジェクトを 'WebUserControl'にキャストすることができません。私は1つのWebユーザーコントロールを追加することができる午前

は動的

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を設定しようとしたことがありますか?すなわち

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

または、UserControlが間違った型にキャストされていますか?たぶん

+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が示すように)。

0

WebUserControlがデータバインドされたコントロールの場合は、Repeater Controlsを使用することをお勧めします。動的なユーザーコントロールを扱う、あなただけの、例えば、リピータのItemTemplateにあなたのコントロールを配置する必要があるRepeaterコントロールを使用して

<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イベントのユーザーコントロール。

これが役に立ちます。