我有一个母版页文件,其中包含2个面板控件中的2个菜单。 我还使用控件来检查用户是否已登录并获取用户类型。
依赖于我想要显示/隐藏面板的类型。控件本身不在主页中引用,而是通过CMS系统动态引用。
我想在用户控件中使用findcontrol来查找母版页中的面板控件。我尝试了不同的方法,但都返回null。
母版页中的内容占位符是 asp:内容runat =“server”ContentPlaceHolderID =“PHMainBlock”
并调用控件 asp:Panel ID =“NormalUser”runat =“server”
我尝试过使用代码....
Panel ph = (Panel)Page.Master.FindControl("NormalUser");
ph.Visible = false;
但带回null,任何帮助?
感谢..
答案 0 :(得分:4)
您可以在Master Page中创建一个公共财产,即
public bool ShowPanel
{
set
{
NormalUser.Visible = value;
}
}
并像这样称呼它
if (Page.Master is NameOfMasterPage)
{
((NameOfMasterPage)Page.Master).ShowPanel = false;
}
答案 1 :(得分:1)
由于Panel控件位于ContentPlaceHolder控件内,因此必须先获取对ContentPlaceHolder的引用,然后使用其FindControl方法找到TextBox控件。
ContentPlaceHolder mpContentPlaceHolder;
Panel pn;
mpContentPlaceHolder = (ContentPlaceHolder)Master.FindControl("PHMainBlock");
if(mpContentPlaceHolder != null)
{
pn = (Panel) mpContentPlaceHolder.FindControl("NormalUser");
pn.Visible = false;
}
答案 2 :(得分:0)
答案 3 :(得分:0)
这是我如何做类似的事情并且工作正常:
if (Page.Master != null)
{
var tempPanel = Page.Master.FindControl("MessagePanel") as UpdatePanel;
if (tempPanel != null)
tempPanel.Visible = true;
var temp = Page.Master.FindControl("MessageForUser") as MessageToUser;
if (temp != null)
temp.PostWarningMessage(message, msgInterval);
}
但是,我在ContentPlaceHolder正上方有“MessagePanel”和“MessageForUser”作为控件。这是我的标记:
<asp:UpdatePanel runat="server" Visible="true" ID="MessagePanel" >
<ContentTemplate>
<msg:MainMessage ID="MessageForUser" runat="server" Visible="true" />
<br />
</ContentTemplate>
</asp:UpdatePanel>
<asp:ContentPlaceHolder ID="cphContent" runat="server" Visible="true">
</asp:ContentPlaceHolder>
如果您的Panel位于标签内,那么您应该能够在不需要Page.Master.FindControl的情况下引用该面板。