2010-12-12 5 views
0

私はマスターページに次のサイドバーを持っています。 ContentPlaceHolderの一部ではありません。ASP.Netマスターページログイン後のサイドバーの表示(ログイン中に表示されたまま)

<div runat="server" visible="false" id="menuAccountMembersDiv" class="leftCol"> 
    <asp:Menu ID="menuAccountMembers" runat="server" StaticSubMenuIndent="16px" Visible="false"> 
    <Items> 
     <asp:MenuItem ImageUrl="~/Resources/x.png" 
     NavigateUrl="~/About.aspx" Text="x" ToolTip="x" 
     Value="b647ce4e-5c7f-400c-a921-ec7902494f26"></asp:MenuItem> 
     <asp:MenuItem ImageUrl="~/Resources/y.png" 
     NavigateUrl="~/About.aspx" Text="y" ToolTip="y" 
     Value="y"></asp:MenuItem> 
     <asp:MenuItem ImageUrl="~/Resources/sarahhunkin.png" NavigateUrl="~/About.aspx" 
     PopOutImageUrl="~/Resources/z.png" Text="z" 
     ToolTip="z" Value="z"></asp:MenuItem> 
     <asp:MenuItem ImageUrl="~/Resources/a.png" 
     NavigateUrl="~/About.aspx" 
     PopOutImageUrl="~/Resources/apop.png" Text="a" 
     ToolTip="a" Value="a"></asp:MenuItem> 
    </Items> 
    </asp:Menu> 
</div> 

私は最初にそれを隠します。しかし、私はそれを表示し、ログイン後に表示したいと思います。標準のWebアプリケーションログインページを使用しています。私は以下を試しました:

protected void LoginUser_LoggedIn(object sender, EventArgs e) 
{ 
    Menu MenuAccountMembers = (Menu)Master.FindControl("menuAccountMembers"); 

    MenuAccountMembers.Visible = true; 

    Control menuAccountMembersDiv = (Control)Master.FindControl("menuAccountMembersDiv"); 

    menuAccountMembersDiv.Visible = true; 
} 

Divオブジェクトがないので、divタグとやりとりすることはできません。いずれにしても、メニュー付きのサイドバーは表示されません。

EDIT: 次のコードをマスターページ自体に追加しました。

public partial class SiteMaster : System.Web.UI.MasterPage 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (HttpContext.Current.Request.IsAuthenticated) 
     { 
      Control MenuDiv = this.FindControl("menuAccountMembersDiv"); 
      MenuDiv.Visible = true; 

      Menu AccountMenu = (Menu)MenuDiv.FindControl("menuAccountMembers"); 
      AccountMenu.Visible = true; 
     } 
    } 
} 
+1

あなたはIDでコントロールにアクセスできると思います。 FindControl()メソッドを使用する必要はありません。あなたはただmenuAccountMembersDiv.Visible = menuAccountMembers.Visible = trueを使うことができます; ) –

答えて

1

私は行くだろうし、それを参照することができます認証ステータスに基づいて、直接あなたのdivにvisibiliy

<div runat="server" visible="<%# Page.User.IsAuthenticated %>" id="menuAccountMembersDiv" class="leftCol"> 

あなたLoginUser_LoggedInメートルを必要としないその方法外divが隠されている場合ethodとメニューは、ユーザーに応じて、すべての負荷に/非表示が表示されますが

にかログインして、あなたの<asp:Menu>コントロールからVisible="false"を削除することを忘れないでくださいされ、その中には何もとにかく表示されません。

+0

もちろん、コードビハインドでDataBind()をコールする必要があります。 –

+0

@Dima true! WebFormsアプリケーションのIMO DataBind()への呼び出しは、例外よりももっとルールです:) –

+0

Thanks Pauli。それが機能するように管理されています。 – Thomas

1

divタグはHtmlGenericControlクラスです。このクラスにアクセスするには、名前空間System.Web.UI.HtmlControlsをインポートします。

または、UserControlにメニューを移動し、UserControlのIDを使用するだけで非表示にすることができます。

ご質問いただければ幸いです。あなたは、メニューのdivタグ内にrunat =「サーバー」タグを持っているので

+0

、そしてHtmlGenericControlはControlから継承しているので、コードは基本的に彼がすでに持っていたものと変わりません。 –

+0

すべてを基底クラスにキャストするのは良い方法ではないと思います))この場合、それは重要ではありませんが、別のクラスでは行います。これが私の要点です。 –

1

、あなたが設定するため...コードに直接

menuAccountMembersDiv.Style.Item("Display") = "none"; 

または

menuAccountMembersDiv.Visible = False; 
+0

enuAccountMembersDiv.Style ["Display"] = "none" in c# –

+0

彼はマスターページを持つページからそのコントロールにアクセスしようとしています。 –

関連する問題