如何将声明的面板放在代码后面的声明占位符中?

时间:2014-02-26 02:46:11

标签: c# asp.net

我有一个aspx页面,其中包含不同的占位符和页面中声明的不同asp面板。在某些条件下,我想在某些占位符中显示某些面板。我知道如何在Javascript中执行此操作,并且我知道如何在占位符的控件集合中添加以编程方式创建的控件。但是我的面板和占位符已在页面中声明。

我想知道是否有办法将已声明的面板放在代码后面的占位符中?

2 个答案:

答案 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);

您可能需要考虑以下替代方法 -

方法1

根据您的逻辑显示和隐藏面板。例如,SomePanel.Visible = true|false;

注意: 理想情况下,您不希望向页面添加大量控件;原因是即使它们没有显示给用户,ViewState也会非常沉重。

但是,与其他方法相比,它很容易实现。

方法2

动态 UserControl 加载 PlaceHolder

var control = LoadControl("SomeUserControl.ascx");
YourPlaceholder.Controls.Add(control);

方法3

动态创建控件。它要复杂得多,因为你需要在每个帖子上重新加载这些控件。

答案 1 :(得分:0)

由于ASP.NET控件层次结构是在页面生命周期的早期构建的,为了动态地将面板控件添加到占位符控件,您必须在Page_Init event1期间执行此操作。

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);

    Panel pnl = new Panel();

    plc.Controls.Add(pnl);
}