ASP.NET菜单控件 - 保持选择父项

时间:2010-07-22 10:40:55

标签: asp.net css menu

我在页面上有两个ASP.NET Menu控件。

我的标题(标签)中有一个用于顶级页面,例如~/Default.aspx

我的侧边栏中有一个子页面,例如~/Products/SomeProduct.aspx

我正在使用selected CSS类来确保所选标签的颜色不同。

适用于顶级页面,但如果我查看子页面,则不会为该选项卡分配selected的CSS类。

在查看子页面时,如何确保顶级菜单项的CSS类为selected

2 个答案:

答案 0 :(得分:1)

借助相关问题找出答案:

Set item.selected in ASP.NET Menu Control

protected void Page_Load(object sender, EventArgs e)
{
    MenuControl.MenuItemDataBound += new MenuEventHandler(MenuControl_MenuItemDataBound);
}

void MenuControl_MenuItemDataBound(object sender, MenuEventArgs e)
{
    if (SiteMap.CurrentNode != null)
    {
        if (SiteMap.CurrentNode.ParentNode.Url == e.Item.NavigateUrl)
        {
            e.Item.Selected = true;
        }
    }
 }

答案 1 :(得分:0)

我的菜单没有数据绑定,所以从不触发MenuItemDataBound。以下是我的解决方案,以在有子项和没有子项时突出显示父菜单项:

向菜单中添加StaticSelectedStyle-xxx,例如StaticSelectedStyle-BackColor="#757588"

在Page_Load上调用此方法:

protected void SetSelectedMenuItem()
        {
            string pageViewed = this.Page.AppRelativeVirtualPath;

            foreach (MenuItem item in Menu.Items)
            {
                if (item.ChildItems.Count > 0)
                {
                    if (pageViewed == item.Value)
                    {
                        item.Selected = true;
                    }
                    else
                    {
                        foreach (MenuItem childItem in item.ChildItems)
                        {
                            if (pageViewed == childItem.Value)
                            {
                                if (childItem.Parent != null)
                                {
                                    childItem.Parent.Selected = true;
                                }
                            }
                        }
                    }
                }
                else
                {
                    if (pageViewed == item.Value)
                    {
                        item.Selected = true;
                    }
                }
            }
        }