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

本文关键字:移动 控件 用户 | 更新日期: 2023-09-27 18:35:29

.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);
}

但似乎我做不到!为什么?我该怎么做?

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

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

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

如果由于某种原因使用 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; }
}
if (condition) 
{ 
   this.panelLeft.Controls.Add(mybox1);
} 
else 
{ 
    this.panelRight.Controls.Add(myBox1); 
}