2012-02-05 25 views
2

私はSite.masterファイルに埋め込まれて、次のメニューコントロールがあります:CSSクラス属性を設定するためにASP.NETメニューの親とその子にCSSクラスを 'selected'に設定しましたか?

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

を選択した私は、次の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; 
     } 
    } 
} 

上記のコードは素晴らしいです。ただし、これらのページにはサブページ(子)が含まれています。子ページにアクセスするときは、親ページに"選択済み" CSS属性を保持します。

私はWeb.sitemapファイルを作成して、すべての親ページとその子ページを整理しました。しかし、Web.sitemapを使用して上記のC#関数が親メニューにCSSクラスの "selected"属性を保持するのを手助けする方法については、私が知っています。この目的のためにWeb.sitemapファイルが必要かどうかわかりません。親と子のロジックは、Web.sitemapファイルでのみ使用できます。

答えて

0

選択するMenuItemが見つかったら、上方向に移動してすべての親を選択します。

MenuItem miP = mi.Parent; 
while (miP != null) 
{ 
    miP.Selected = true; 
    if (miP.Parent == null) 
    break; 
    else 
    miP = miP.Parent; 
} 
+0

親子関係がWeb.sitemapファイルでのみ参照されるため、これは機能しません。私はあなたのコードで参照を参照してくださいが表示されません。私が何かを逃していない限り、。 – Fawadafr

+0

私は非常に難しい質問をしましたか? – Fawadafr

+0

試しましたか? – Malk

関連する問題