我一直试图找到一种简单的方法来突出显示当前所选菜单项的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;
}
答案 0 :(得分:0)
我可以给你一个主意。在ModulesMenu_MenuItemDataBound
中,通过以下代码比较item url
和请求的物理文件
Path.GetFileName(Request.PhysicalPath).ToUpper()
你可以使用can比较两者并使用compare设置selected css-class
如下
lstrMenuUrl.ToUpper().Replace(" ", "").Contains(filename.ToUpper())
其中lstrMenuUrl
是点击的当前菜单。
这是一个可以帮助您的链接
答案 1 :(得分:0)
我错误地设置了属性。要设置的属性是
<Staticselectedstyle ForeColor="Red" Font-Bold="true" />
而不是
<DynamicSelectedStyle ForeColor="Red" Font-Bold="true" />