检查PlaceHolder中是否显示自定义控件

时间:2016-08-10 10:31:07

标签: c# asp.net

我有两个占位符/面板:

此面板显示为已登录的成员。

<asp:Panel ID="PanelLogged" runat="server" Visible="false">
    <cc:MyControl1 runat="server" />
</asp:Panel>

此面板针对未登录成员显示。

<asp:Panel ID="PanelNotLogged" runat="server" Visible="true">
    <cc:MyControl2 runat="server" />
</asp:Panel>

在Page.Page_Load事件中,我正在显示/隐藏其中一个面板。在两个自定义控件中,我都有Page_Load事件,我正在填充它们/进行一些任务。但是,即使Panel具有属性Visible =“false”,也会始终在两个自定义控件上调用Page_Load事件。

如何只调用当前可见的控件的一个Page_Load?我尝试使用DataBind()事件但没有成功。

1 个答案:

答案 0 :(得分:0)

在控件的Page_Load中,您可以在父级上使用FindControl并检查面板的可见性。

    Panel panel = Parent.FindControl("PanelLogged") as Panel;
    if (panel.Visible == true)
    {
        //do stuff
    }

你也可以在后面的代码中加载你需要的控件,这样只加载一个控件而不是两个。

if (Request.IsAuthenticated)
{
    MyControl1 control = (MyControl1)LoadControl("~/MyControl1.ascx");
    Panel1.Controls.Add(control);
}
else
{
    MyControl2 control = (MyControl2)LoadControl("~/MyControl2.ascx");
    Panel1.Controls.Add(control);
 }

MyControl1和MyControl2可能是控件的类名。您可以在控件背后的代码中找到它们。

using System;
using System.Web.UI.WebControls;

namespace ProjectNameSpace
{
    public partial class MyControl1 : System.Web.UI.UserControl
    {