访问 ascx 文件中的母版页控件
本文关键字:母版页 控件 ascx 文件 访问 | 更新日期: 2023-09-27 18:32:07
我有一个母版页文件,其中包含 2 个面板控件中的 2 个菜单。我还使用控件来检查用户是否已登录并获取用户类型。
删除我想显示/隐藏面板的类型。控件本身不在母版页中引用,而是通过 CMS 系统动态引用。
我想在用户控件中使用 findcontrol 在母版页中查找面板控件。我尝试了不同的方法,但都返回 null。
母版页中的内容占位符是 asp:Content runat="server" ContentPlaceHolderID="PHMainBlock"
并且该控件称为 asp:Panel ID="NormalUser" runat="server"
我试过使用代码....
Panel ph = (Panel)Page.Master.FindControl("NormalUser");
ph.Visible = false;
但是带回空,有什么帮助吗?
谢谢。。
您可以在母版页中创建公共属性,即
public bool ShowPanel
{
set
{
NormalUser.Visible = value;
}
}
并像这样称呼它
if (Page.Master is NameOfMasterPage)
{
((NameOfMasterPage)Page.Master).ShowPanel = false;
}
由于 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;
}
http://msdn.microsoft.com/en-us/library/xxwa0ff0.aspx
这是我做类似事情的方法,它工作正常:
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);
}
但是,我将"MessagePanel"和"MessageForUser"作为ContentPlaceHolder上方的控件。 这是我的标记:
<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>
如果您的面板位于标记内,那么您应该能够引用该面板,而无需Page.Master.FindControl。
一种方法是用javascript(jquery)解决这个问题:
$('.NormalUser').hide();
http://api.jquery.com/hide/