2012-04-18 94 views
0

我有一個菜單,使用了我的母版頁中的網站地圖。我想根據用戶禁用某些菜單項。在任何情況下,我都不想去掉MS角色的兔子洞。在主頁面上隱藏菜單項

我有以下的Site.Master:

 <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類似於以下:

<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> 

在Site.Master.cs我嘗試添加下兩個以下代碼的Page_Load下MainMenu_MenuItemDataBound:

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

當我把它MainMenu_MenuItemDataBound下,它沒有效果。 當我把它放在Page_Load()下時,它打印爲零,即使我可以看到正確顯示的菜單,並且它還有項目!

Facts: 菜單存在。 菜單中有項目。 菜單和項目正確顯示。

我想進去,例如,使標題「管理員」的項目不可見(以及它的子菜單項) - 我想刪除它,但要麼使其不可見或禁用它會沒事的。我嘗試過涉及MainMenu.FindItem的各種咒語......哪種方法似乎與查找物品沒有任何關係。這是當我發現它沒有找到任何物品的原因是因爲物品數量爲零(即使我可以看到物品)。

解決方案按以下戴夫·d,但還需要

OnMenuItemDataBound="MainMenu_MenuItemDataBound" 

添加到MainMenu的標籤。

回答

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 2012-04-18 16:59:20

+0

啊!祕密是我需要添加 OnMenuItemDataBound =「MainMenu_MenuItemDataBound」 到MainMenu的標籤。所以你的解決方案確實可行 – elbillaf 2012-04-18 17:05:45