ASP.NET:突出显示当前页面的菜单项

Jon*_*tin 17 asp.net

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

<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal" StaticSelectedStyle-ForeColor="#99CCFF" DynamicSelectedStyle-ForeColor="#99CCFF">
    <Items>
        <asp:MenuItem NavigateUrl="~/Default.aspx" Text="Operations"/>
        <asp:MenuItem NavigateUrl="~/Analysis.aspx" Text="Analysis"/>
        <asp:MenuItem NavigateUrl="~/Dashboard.aspx" Text="Dashboard"/>
        <asp:MenuItem NavigateUrl="~/Flashboard.aspx" Text="Flashboard"/>
        <asp:MenuItem NavigateUrl="~/Spacequest.aspx" Text="SQ OBP"/>
    </Items>
</asp:Menu>
Run Code Online (Sandbox Code Playgroud)

并在服务器端Page_Load功能:

((Menu)Master.FindControl("NavigationMenu")).Items[0].Selected = true;
Run Code Online (Sandbox Code Playgroud)

但这不起作用.我尝试使用站点地图(即使站点地图不是我想要使用的),但这也没有用.有任何想法吗?

Jam*_*xon 19

StaticSelectedStyle您可以在菜单中使用该属性.

<asp:menu [...]>
        <staticselectedstyle backcolor="LightBlue"
          borderstyle="Solid"
          bordercolor="Black"
          borderwidth="1"/>

        [...]
</asp:menu>
Run Code Online (Sandbox Code Playgroud)

此处获得更多信息.

此外,如果有一个类应用于所选项目(我不确定是否有,但它会很方便),你可以简单地用你的CSS挂钩.这比使用该StaticSelectedStyle属性更好.

UPDATE

值得注意的是,您的使用IncludeStyleBlock="false"将阻止您的菜单生成控制所选项目所需的CSS.

关闭样式块后,您必须提供自己的样式,并且不会使用菜单的自动生成样式.

来自MSDN:

如果将此属性设置为false,则无法设置样式属性.例如,您无法在标记中添加DynamicHoverStyle-ForeColor属性或在代码中设置DynamicHoverStyle.ForeColor属性.

来源:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.menu.includestyleblock.aspx


Jam*_*son 7

我想你必须遍历菜单项并查看当前页面URL是否包含菜单项的NavigateUrl.

foreach (MenuItem item in mn.Items)
{
   if (Request.Url.AbsoluteUri.ToLower().Contains(Page.ResolveUrl(item.NavigateUrl.ToLower()))
   {
      item.Selected = true;
   }
}
Run Code Online (Sandbox Code Playgroud)