为什么没有为ASP Menu控件设置“选定”类?

时间:2011-05-16 13:34:36

标签: asp.net aspmenu-control

我是一名前端开发人员,他使用看似无比的.NET开发工具,似乎无法解决为什么ASP菜单控件没有显示所选菜单项的原因。 .NET开发人员向我发送了以下代码。这里是否缺少一些需要启用CSS的规则?

提前致谢

控制器配置

 <asp:Menu ID="mnuMaster" 
                          runat="server" 
                          DataSourceID="sitemapMaster" 
                          StaticDisplayLevels="1" 
                          MaximumDynamicDisplayLevels="0" 
                          Orientation="Horizontal" 
                          StaticEnableDefaultPopOutImage="False" 
                          CssSelectorClass="TopMainMenu" onmenuitemdatabound="mnuMaster_MenuItemDataBound"
                          StaticBottomSeparatorImageUrl="~/App_Themes/PCTools/Images/top_menu_separator.gif"
                          ></asp:Menu>

CSS选择的课程

    .TopMainMenu .AspNet-Menu li a:active, .TopMainMenu li.AspNet-Menu-Selected a,.TopMainMenu li.AspNet-Menu-ChildSelected a,.TopMainMenu li.AspNet-Menu-ParentSelected a {
    background:url(Images/navbg.gif) repeat-x 0 -86px;
}

2 个答案:

答案 0 :(得分:0)

我们通常在设计师提供的普通HTML中使用标准UL组,然后将它们转换为HTML服务器标签。

可能还有其他解决方案,但我们通常采用的解决方案就是这样。

首先,每个顶级菜单项都需要一个ID。

如果菜单位于母版页上(我将假设它是)

在后面的母版页代码中,您可以放置​​这样的代码。

//Discover currently navigated page TYPE
if (this.Page is `pagetype of the current page`)
    //add a CSS class to the top level menu item
    miFirstMenuItem.Attributes["class"] += " highlightedMenuItemCSSClass";

然后HTML输出会将另一个CSS类附加到您应用特定样式的菜单项

这是一个现实生活中的例子 节点您必须将SetActiveTab方法中的类型更改为MenuItem的正确类型

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            bool homeVisited        = Page is Default;
            bool productsVisited    = Page is Products_List;
            bool demoVisited        = Page is Demonstrations;
            bool contactVisited     = Page is Contact;

            if (homeVisited)
                SetActivePage(hlHome, ButtonSide.Left);
            if (productsVisited)
                SetActivePage(hlProducts, ButtonSide.Middle);
            if (demoVisited)
                SetActivePage(hlDemo, ButtonSide.Middle);
            if (contactVisited)
                SetActivePage(hlContact, ButtonSide.Right);

        }
    }

这显示了与上述不同的方法,但你可以用link.Attributes [“class”] + =“cssClass”替换它;注意第一个“。

之后的空格

另外ButtonSide是我添加的一个枚举,因为所有中间的menuitems在我的特定情况下都有相同的CSS类,左右也是。

    private void SetActivePage(HyperLink link, ButtonSide side)
    {
        if (side == ButtonSide.Left)
            link.CssClass = "currentleft";
        if (side == ButtonSide.Middle)
            link.CssClass = "currentmiddle";
        if (side == ButtonSide.Right)
            link.CssClass = "currentright";
    }

答案 1 :(得分:0)

VS201 / .Net4中似乎存在一个错误,其中您在de asp.menu属性中指定的CSS类名称为StaticSelectedStyle&amp; DynamicSelectedStyle被忽略。菜单始终使用“已选择”的类名。