如何在C#中突出显示动态加载的菜单项?

时间:2014-02-04 05:19:34

标签: html asp.net menu master-pages

我一直试图找到一种简单的方法来突出显示当前所选菜单项的asp.net菜单(因此用户知道他们在哪个页面上),但无论我尝试过什么,我都无法获得它工作。在我的标记中,我有:

<asp:Menu SkinID="modulesMenu" DataSourceID="modulesSource" runat="server"  ID="ModulesMenu"
OnMenuItemDataBound="ModulesMenu_MenuItemDataBound">
<StaticItemTemplate>
   <div>
       <asp:HyperLink ID="HyperLink2" CssClass="moduleName" 
       NavigateUrl='<%# ((MenuItem)Container.DataItem).NavigateUrl %>'  
       Text='<%# ((MenuItem)Container.DataItem).Text %>' runat="server" />
   </div>
</StaticItemTemplate>
<DynamicSelectedStyle ForeColor="Red" Font-Bold="true" />
</asp:Menu>

这是用于识别所选项目的c#代码

protected void ModulesMenu_MenuItemDataBound(object sender, MenuEventArgs e)
{
    SiteMapNode siteMapNode = (SiteMapNode)e.Item.DataItem;
    string pathStringFormat = IsNodeActive(siteMapNode) ? ConfigurationManager.AppSettings["ModuleImagePathFormatString_Active"] : ConfigurationManager.AppSettings["ModuleImagePathFormatString_Inactive"];
    e.Item.ImageUrl = String.Format(pathStringFormat, siteMapNode["imageName"]);
    if (IsNodeActive(siteMapNode))
    {
        e.Item.Selected = true;

    }

}

private bool IsNodeActive(SiteMapNode siteMapNode)
{
    if (SiteMap.CurrentNode != null)
    {
        return (SiteMap.CurrentNode.Equals(siteMapNode) || SiteMap.CurrentNode.IsDescendantOf(siteMapNode));
    }
    return false;
}

2 个答案:

答案 0 :(得分:0)

我可以给你一个主意。在ModulesMenu_MenuItemDataBound中,通过以下代码比较item url和请求的物理文件

  Path.GetFileName(Request.PhysicalPath).ToUpper()

你可以使用can比较两者并使用compare设置selected css-class如下

lstrMenuUrl.ToUpper().Replace(" ", "").Contains(filename.ToUpper())

其中lstrMenuUrl是点击的当前菜单。

这是一个可以帮助您的链接

Highlight Selected Tab in ASP.Net Menu

答案 1 :(得分:0)

我错误地设置了属性。要设置的属性是

 <Staticselectedstyle ForeColor="Red" Font-Bold="true"    />

而不是

<DynamicSelectedStyle ForeColor="Red" Font-Bold="true" />