Site.masterファイルに次のメニュー コントロールが埋め込まれています。
<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal" RenderingMode="List">
<Items>
<asp:MenuItem NavigateUrl="~/Default.aspx" Text="Home" />
<asp:MenuItem NavigateUrl="~/TechServices.aspx" Text="Tech Services"/>
<asp:MenuItem NavigateUrl="~/HumanResources.aspx" Text="Human Resources"/>
<asp:MenuItem NavigateUrl="~/Marketing.aspx" Text="Marketing"/>
<asp:MenuItem NavigateUrl="~/DocumentControl.aspx" Text="Document Control"/>
<asp:MenuItem NavigateUrl="~/IT.aspx" Text="Information Tech"/>
</Items>
</asp:Menu>
選択した CSS クラス属性を設定するために、次の C# コードを使用します。
protected void Page_Load(object sender, EventArgs e) {
string thispage = this.Page.AppRelativeVirtualPath;
int slashpos = thispage.LastIndexOf('/');
string pagename = thispage.Substring(slashpos + 1);
foreach (MenuItem mi in NavigationMenu.Items) {
if (mi.NavigateUrl.Contains(pagename)) {
mi.Selected = true;
break;
}
}
}
上記のコードはうまく機能します。ただし、これらのページにはサブページ (子) が含まれているため、子ページの 1 つにアクセスするときに、親ページに「選択済み」 CSS 属性を保持したいと考えています。
また、すべての親ページとその子ページを整理するWeb.sitemapファイルも作成しました。ただし、Web.sitemap を使用して上記の C# 関数を支援し、親メニューが CSS クラスの「選択された」属性を保持できるようにする方法については、よく知っています。この目的で Web.sitemap ファイルが必要かどうかわかりません。親ロジックと子ロジックは、Web.sitemap ファイルでのみ使用できます。