簡體   English   中英

如何將用戶控件移動到面板中?

[英]How can I move an user control into a 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);
}

但似乎我做不到! 為什么? 我該怎么辦呢?

您必須使用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); 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM