检查自定义控件是否在占位符中可见

本文关键字:占位符 自定义控件 是否 检查 | 更新日期: 2023-09-27 18:01:35

我有两个占位符/面板:

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

<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_Load事件,我正在显示/隐藏其中一个面板。在两个自定义控件中,我都有Page_Load事件,我正在填充它们/制作一些任务。然而,Page_Load事件在两个自定义控件上一直被调用,即使Panel有属性Visible="false"。

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

检查自定义控件是否在占位符中可见

在控件的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
    {