2012-02-05 16 views
2

我已經嵌入在的Site.Master文件以下菜單控制:在ASP.NET菜單父母和他們的孩子中設置CSS class'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> 

爲了設置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; 
     } 
    } 
} 

上面的代碼很好用。但是,這些頁面現在包含子頁面(子項),我希望父頁面在訪問其子頁面時保留其「」「選定」 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 2012-02-05 03:48:36

+0

我問了一個非常難的問題嗎? – Fawadafr 2012-02-08 02:54:37

+0

你試過了嗎? – Malk 2012-02-08 17:20:37