2

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 ファイルでのみ使用できます。

4

1 に答える 1

0

選択する MenuItem が見つかったら、上に移動してすべての親を選択します。ここにいくつかの擬似コードがあります:

MenuItem miP = mi.Parent;
while (miP != null) 
{ 
  miP.Selected = true;
  if (miP.Parent == null)
   break;
  else
   miP = miP.Parent;
}
于 2012-02-05T03:33:58.787 に答える