2012-04-25 61 views
2

我有一個母版頁文件,其中包含2菜單的2面板控件。 我也使用一個控件來檢查用戶是否登錄並獲取用戶類型。在ascx文件中訪問母版頁控制

Deppending上我想顯示/類型隱藏面板。控制本身未在主頁面中引用,而是通過CMS系統動態引用。

我想使用的FindControl用戶控件找到在母版頁面板控制。我嘗試過不同的方法,但都返回null。

在主頁的內容的佔位符是 ASP:內容RUNAT = 「服務器」 ContentPlaceHolderID = 「PHMainBlock」

和控制稱爲 ASP:面板ID = 「NormalUser」 RUNAT = 「服務器」

我已經使用的代碼試圖....

Panel ph = (Panel)Page.Master.FindControl("NormalUser"); 
ph.Visible = false; 

但帶回空,任何幫助嗎?

感謝..

+0

將類名設置爲您的控件並通過類屬性進行搜索?現在註冊StartUp Script並訪問相同的功能。 – Pankaj 2012-04-25 13:24:11

回答

0

一種方法是使用JavaScript來解決這個問題(jQuery的):

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

​​

+0

這不是一個好主意。首先,它不會降低非Javascript用戶的性能。其次,即使對於JavaScript用戶,它也會暴露在不適合當前用戶的源URL中。 – 2012-04-25 16:36:07

4

你可以在你創建一個公共屬性母版頁即

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

,並調用它像這樣

if (Page.Master is NameOfMasterPage) 
{ 
    ((NameOfMasterPage)Page.Master).ShowPanel = false; 
} 
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

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

不過,我有 「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。