ASP.NET:如何动态地在同一个aspx页面中添加两个Web用户控件?

时间:2009-04-10 08:43:28

标签: asp.net

如何动态地在同一个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 />"));
}

4 个答案:

答案 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事件。

希望这会有所帮助。