我有两个占位符/面板:
此面板显示为已登录的成员。
<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()事件但没有成功。
答案 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
{