在ASP.NET菜单父项及其子项中设置CSS类“已选择”?

时间:2012-02-05 03:27:26

标签: asp.net css menuitem web.sitemap

我在 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;
        }
    }
}

上面的代码效果很好。但是,这些页面现在包含子页面(子),我希望父页面在访问其子页面时保留“Selected” CSS属性。

我还创建了 Web.sitemap 文件来整理所有父页面及其子页面。但是,我有关如何使用Web.sitemap来帮助上面的C#函数来帮助父菜单保留其CSS类“selected”属性。我不确定我是否需要Web.sitemap文件用于此目的?父和子逻辑仅在Web.sitemap文件中可用。

1 个答案:

答案 0 :(得分:0)

一旦找到要选择的MenuItem,只需向上移动并选择所有父级。这是一些伪代码:

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