0

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

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

4

3 回答 3

1

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

Control myBox1 = LoadControl("~/box/MyBox.ascx");
if (condition) 
{ 
    panelLeft.Controls.Add(myBox1); 
} 
else 
{ 
    panelRight.Controls.Add(myBox1); 
} 
于 2012-05-28T15:25:16.543 回答
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; }
}
于 2012-05-28T16:54:20.563 回答
-1
if (condition) 
{ 
   this.panelLeft.Controls.Add(mybox1);
} 
else 
{ 
    this.panelRight.Controls.Add(myBox1); 
}
于 2012-05-28T15:37:45.620 回答