2

我有一个母版页文件,其中包含 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;

但带回null,有什么帮助吗?

谢谢..

4

4 回答 4

4

您可以在母版页中创建一个公共属性,即

public bool ShowPanel
{
    set
    {
        NormalUser.Visible = value;
    }
}

像这样称呼它

if (Page.Master is NameOfMasterPage)
{
    ((NameOfMasterPage)Page.Master).ShowPanel = false;
}
于 2012-04-25T12:57:21.453 回答
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;
}

http://msdn.microsoft.com/en-us/library/xxwa0ff0.aspx

于 2012-04-25T13:10:48.173 回答
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>

如果您的面板位于标签内,那么您应该能够在不需要 Page.Master.FindControl 的情况下引用面板。

于 2012-04-25T13:34:46.267 回答
0

一种方法是用javascript(jquery)解决这个问题:

$('.NormalUser').hide();

http://api.jquery.com/hide/

于 2012-04-25T12:53:56.053 回答