如何将用户控件移动到面板中?

时间:2012-05-28 15:22:23

标签: c# .net user-controls panel

.aspx我有这个:

<%@ Register src="box/MyBox.ascx" tagname="MyBox" tagprefix="uc2" %>
<uc2:MyBoxID="MyBox1" runat="server" />

<asp:Panel ID="panelLeft" runat="server">

</asp:Panel>

<asp:Panel ID="panelRight" runat="server">

</asp:Panel>    

我想在aspx.cs上做这样的事情:

if (condition)
{
    panelLeft.Controls.Add(MyBox1);
}
else
{
    panelRight.Controls.Add(MyBox1);
}

但似乎我不能这样做!为什么?我怎么能这样做?

3 个答案:

答案 0 :(得分:1)

您必须使用LoadControl来创建控制服务器端。

Control myBox1 = LoadControl("~/box/MyBox.ascx");
if (condition) 
{ 
    panelLeft.Controls.Add(myBox1); 
} 
else 
{ 
    panelRight.Controls.Add(myBox1); 
} 

答案 1 :(得分:0)

如果由于某种原因使用LoadControl添加控件不适合您想要采用的方法,可以通过将两个用户控件副本添加到您希望的两个位置的标记中来实现类似的操作。然后,您可以在条件逻辑中的代码中切换可见性。

例如,像这样的ASPX:

<%@ Register src="box/MyBox.ascx" tagname="MyBox" tagprefix="uc2" %>


<asp:Panel ID="panelLeft" runat="server">
    <uc2:MyBoxID="MyBox1" runat="server" />    
</asp:Panel>

<asp:Panel ID="panelRight" runat="server">
    <uc2:MyBoxID="MyBox2" runat="server" />        
</asp:Panel>    

然后在后面的代码中,您可以切换可见性:

MyBox1.Visible = condition;
MyBox2.Visible = !MyBox1.Visible;    

然而,您正在将两个不同的用户控件副本加载到页面上,然后您的代码必须知道要访问哪个用户控件,而不是始终访问“MyBox1”。您可能需要在隐藏的代码中使用一个属性来检查您,例如:

private MyBox MyBox{
   get { return condition ? MyBox1 : MyBox2; }
}

答案 2 :(得分:-1)

if (condition) 
{ 
   this.panelLeft.Controls.Add(mybox1);
} 
else 
{ 
    this.panelRight.Controls.Add(myBox1); 
}