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

上面的代码效果很好。但是,这些页面现在包含子页面(子页面),我希望父页面在访问其子页面之一时保留其“已选择” 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 回答