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>

タグ内に Panel がある場合、Page.Master.FindControl を必要とせずにパネルを参照できるはずです。

于 2012-04-25T13:34:46.267 に答える
0

1 つの方法は、javascript (jquery) を使用してこの問題を解決することです。

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

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

于 2012-04-25T12:53:56.053 に答える