2012-04-18 21 views
0

マスターページにあるサイトマップを使用しているメニューがあります。ユーザーに応じて特定のメニュー項目を無効にしたいどのような状況下でも、私はMSの「役割」のウサギの穴に行きたいとは思わない。マスターページのメニュー項目を非表示にする

 <div class="clear hideSkiplink"> 
      <asp:Menu ID="MainMenu" runat="server" DataSourceID="SiteMapDataSource1" 
       Orientation="Horizontal" 
       CssClass="menu" 
       StaticDisplayLevels="1" 
       StaticMenuItemStyle-VerticalPadding="2" 
       StaticMenuItemStyle-HorizontalPadding="10" 
       StaticMenuItemStyle-Font-Name="Verdana" 
       StaticMenuItemStyle-Font-Size="12pt" 
       StaticHoverStyle-BackColor="#707070" 
       StaticHoverStyle-ForeColor="#550000" 

       DynamicMenuStyle-HorizontalPadding="2" 
       DynamicMenuStyle-VerticalPadding="2" 
       DynamicMenuStyle-BackColor="#E0E0E0" 
       DynamicMenuStyle-ForeColor="#FFFFFF" 
       DynamicMenuStyle-BorderWidth="1" 
       DynamicMenuStyle-BorderColor="#C0C0C0" 
       DynamicMenuItemStyle-VerticalPadding="2" 
       DynamicMenuItemStyle-Font-Name="Verdana" 
       DynamicMenuItemStyle-Font-Size="9pt" 
       DynamicMenuItemStyle-ForeColor="#FFFFFF" 
       DynamicHoverStyle-BackColor="#707070" 
       DynamicHoverStyle-ForeColor="#550000" />    


      <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" ShowStartingNode="False" /> 

私は次のようweb.sitemap類似有する:

Iは、以下のSite.Masterを有するIの両方の下で、次のコードを追加しようとしたSite.Master.csで

<siteMapNode > 
    <siteMapNode url="default.aspx" title="Home" description="" /> 

    <siteMapNode url="default.aspx?p=0" title="Admin" description=""> 
     <siteMapNode url="default.aspx?p=55" title="thing1" description="" /> 
     <siteMapNode url="default.aspx?p=56" title="thing2" description="" /> 
    </siteMapNode> 

    <siteMapNode url="default.aspx?p=1" title="Thing3" description=""> 
    </siteMapNode> 
    <siteMapNode url="default.aspx?p=2" title="Thing4" description=""> 
    </siteMapNode> 
</siteMapNode> 

Page_Load AND MainMenu_MenuItemDataBoundの下:

Response.Write(MainMenu.Items.Count.ToString()); 

MainMenu_MenuItemDataBoundの下に置くと、それは効果がありません。 私はPage_Load()の下に置くとき、私は正しく表示されたメニューを見ることができ、それはアイテムを持っていますが、ゼロを出力します!

ファクト: メニューがあります。 メニューには項目があります。 メニューと項目は、表示されているとおりに正しく表示されます。

たとえば、「管理者」というタイトルのアイテムを(サブメニューアイテムとともに)非表示にしたい - それを削除したいと思いますが、非表示にするか無効にするかは問題ありません。私は、MainMenu.FindItemを含むさまざまな呪文を試してみました...どのメソッドがアイテムを見つけることと関係がないようです。これは、アイテム数がゼロである(アイテムが表示されていても)ため、アイテムが見つからないという理由に気付いたときです。

以下デイブDごとなどのソリューションが、また、メインメニュータグに

OnMenuItemDataBound="MainMenu_MenuItemDataBound" 

を追加する必要がありました。

答えて

1

メニューはまだpage_loadのデータにバインドされません。それはなぜカウントがないのですか?それらが結合しているようMenuItemDataBound内の項目をチェック

は次のように行うことができます。

protected void MainMenu_MenuItemDataBound(Object sender, MenuEventArgs e) 
{ 

    if (e.Item.Text == "Admin") 
    { 
     // disable the item 
     //e.Item.Enabled = false; 

     // remove the menu item 
     MainMenu.Items.Remove(e.Item); 

    } 
} 
+0

動作しませんでした。私が知る限り、MainMenu_MenuItemDataBoundは呼び出されません。 – elbillaf

+0

AH!秘密は、私は のOnMenuItemDataBound = "MainMenu_MenuItemDataBound" をMainMenuのタグに追加する必要がありました。したがって、あなたのソリューションは機能します。 – elbillaf

関連する問題