Почему "выбранные" классы не устанавливаются для управления меню ASP?

Я - веб-разработчик, работающий с, казалось бы, несовместимым разработчиком.NET, который, похоже, не может решить, почему элемент управления ASP Menu не отображает выбранный пункт меню. Разработчик.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 ответа

Кажется, есть ошибка в VS201 / .Net4, когда имена классов CSS, которые вы указываете в свойствах de asp.menu StaticSelectedStyle & DynamicSelectedStyle, игнорируются. В меню всегда используется имя класса "выбрано".

Обычно мы используем стандартную группу UL в обычном HTML, которую предоставляет дизайнер, а затем превращаем их в теги HTML-сервера.

Могут быть и другие решения, но мы обычно делаем следующее.

Сначала каждому пункту меню верхнего уровня нужен идентификатор.

Если меню на главной странице (я собираюсь предположить, что это)

в коде главной страницы вы можете разместить код, подобный этому.

//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";
    }
Другие вопросы по тегам