Accessing Master page control in ascx file

后端 未结 4 1717
我寻月下人不归
我寻月下人不归 2021-01-15 03:03

I have a master page file that contains a 2 menu\'s in a 2 panel controls. I also use a control to check if user is logged in and get the type of user.

Deppending on

相关标签:
4条回答
  • 2021-01-15 03:21

    You could create a public property in you Master Page i.e

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

    And call it like this

    if (Page.Master is NameOfMasterPage)
    {
        ((NameOfMasterPage)Page.Master).ShowPanel = false;
    }
    
    0 讨论(0)
  • 2021-01-15 03:42

    Because the Panel control is inside a ContentPlaceHolder control, you must first get a reference to the ContentPlaceHolder and then use its FindControl method to locate the TextBox control.

    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

    0 讨论(0)
  • 2021-01-15 03:44

    Here's how I do something similar and it works fine:

    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);
    }
    

    However, I have "MessagePanel" and "MessageForUser" as controls right above the ContentPlaceHolder. Here's my markup:

    <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>
    

    If you have your Panel inside of a tag, then you should be able to reference the panel without needing Page.Master.FindControl.

    0 讨论(0)
  • 2021-01-15 03:46

    One way would be to solve this problem with javascript (jquery):

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

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

    0 讨论(0)
提交回复
热议问题