0

我是一名前端开发人员,与一个看似不称职的 .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;
}
4

2 回答 2

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 是我添加的一个枚举,因为在我的特定情况下所有中间菜单项都将具有相同的 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";
    }
于 2011-05-16T20:28:14.567 回答
0

VS201 / .Net4 中似乎存在一个错误,您在 de asp.menu 属性 StaticSelectedStyle 和 DynamicSelectedStyle 中指定的 CSS 类名被忽略。菜单总是使用类名“selected”。

于 2011-06-08T10:28:20.223 回答