如何动态地在同一个aspx页面中添加两个Web用户控件?当我尝试这样做时,我收到以下错误
无法将“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 :(得分:1)
您是否尝试过为用户控件设置ID?即
Control uc = (WebUserControl)Page.LoadControl("WebUserControlAdult.ascx");
uc.id = "Dyn" + i.tostring();
Panel1.Controls.Add(uc);
或者UserControl被转换为错误的类型?也许
(WebUserControlAdult)Page.LoadControl ...
答案 1 :(得分: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所示)。
答案 2 :(得分:0)
如果您的WebUserControl是数据绑定控件,您可能需要考虑使用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>
答案 3 :(得分:0)
处理动态用户控件可能会让人痛苦。
作为经验法则我遵循,每当你创建一个动态用户控件时,你必须设置它的ID,以便ASP.net可以在回发后重新分配它,并在发回后保留控件值你应该重新加载你的用户控制Page_Init事件。
希望这会有所帮助。