マスター ページにあるサイトマップを使用するメニューがあります。ユーザーによっては、特定のメニュー項目を無効にしたい。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() の下に置くと、正しく表示されたメニューを確認でき、アイテムがあるにもかかわらず、ゼロが出力されます!
事実: メニューは存在します。メニューには項目があります。メニューとアイテムは、これまでのところ正しく表示されます。
たとえば、タイトルが「管理者」のアイテムを(サブメニューアイテムとともに)非表示にしたいのですが、削除したいのですが、非表示にするか無効にしても問題ありません。MainMenu.FindItem を含むさまざまな呪文を試しましたが、このメソッドはアイテムの検索とは関係がないようです。これは、アイテムが見つからない理由は、アイテム数がゼロであるためであることに気付きました (アイテムは表示されますが)。
以下の Dave D による解決策ですが、追加する必要もありました
OnMenuItemDataBound="MainMenu_MenuItemDataBound"
MainMenu タグに。