2012-04-25 8 views
2

2パネルのコントロールに2つのメニューを含むマスターページファイルがあります。 私はまた、コントロールがユーザーがログインしているかどうかを確認し、ユーザーの種類を取得します。ascxファイルのマスターページコントロールへのアクセス

タイプのデポジットパネルの表示/非表示を希望します。コントロール自体はマスターページでは参照されませんが、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

答えて

0

一つの方法はJavaScriptを使用してこの問題を解決することであろう(jqueryの):

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

​​

+0

これは良い考えではありません。まず、Javascript以外のユーザーでは低下しません。第2に、Javascriptユーザーであっても、現在のユーザーにとっては意味のないソースURLに公開されます。 –

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

私は似た何かをする、それが正常に動作方法は次のとおりです。しかし、私は右のContentPlaceHolder上記コントロールとして "MessagePanel" と "MessageForUser" を持っている

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

。ここに私のマークアップです:

<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を必要とせずにパネルを参照することができるはずです。

関連する問題