我有一个aspx页面,其中包含不同的占位符和页面中声明的不同asp面板。在某些条件下,我想在某些占位符中显示某些面板。我知道如何在Javascript中执行此操作,并且我知道如何在占位符的控件集合中添加以编程方式创建的控件。但是我的面板和占位符已在页面中声明。
我想知道是否有办法将已声明的面板放在代码后面的占位符中?
答案 0 :(得分:2)
但是我的面板和占位符已在页面中声明。
是的,您可以将位于 PlaceHolder1 内的 Panel1 重新定位到 PlaceHolder2 。但是,重新定位已在 aspx 页面中声明的控件并不常见。
<asp:PlaceHolder runat="server" ID="PlaceHolder1">
<asp:Panel runat="server" ID="Panel1">
<h1>Panel 1</h1>
</asp:Panel>
</asp:PlaceHolder>
<asp:PlaceHolder runat="server" ID="PlaceHolder2">
<asp:Panel runat="server" ID="Panel2">
<h1>Panel 2</h1>
</asp:Panel>
</asp:PlaceHolder>
PlaceHolder1.Controls.Add(Panel2);
PlaceHolder2.Controls.Add(Panel1);
您可能需要考虑以下替代方法 -
根据您的逻辑显示和隐藏面板。例如,SomePanel.Visible = true|false;
注意: 理想情况下,您不希望向页面添加大量控件;原因是即使它们没有显示给用户,ViewState也会非常沉重。
但是,与其他方法相比,它很容易实现。
动态 UserControl 加载 PlaceHolder 。
var control = LoadControl("SomeUserControl.ascx");
YourPlaceholder.Controls.Add(control);
动态创建控件。它要复杂得多,因为你需要在每个帖子上重新加载这些控件。
答案 1 :(得分:0)
由于ASP.NET控件层次结构是在页面生命周期的早期构建的,为了动态地将面板控件添加到占位符控件,您必须在Page_Init event1期间执行此操作。
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
Panel pnl = new Panel();
plc.Controls.Add(pnl);
}