ASP.NET 4.0 Проблемы с отображением элемента управления меню после удаления controlRenderingCompatibilityVersion = "3.5" - PullRequest
26 голосов
/ 17 июня 2010

Я на самом деле мигрирую веб-сайты на ASP.NET 4.0, у меня проблемы с новым рендерингом элементов управления меню.Мои сайты интенсивно используют вложенные меню.Используются эффекты наведения, а макет определяется сочетанием тем и оболочек со связанным CSS.

Если я удаляю атрибут pageRenderingCompatibilityVersion страниц, они больше не отображаются как вложенные таблицы, а как теги ul / li.Это ломает мой макет во многих отношениях.Любые рекомендации по переносу сложного макета меню ASP.NET очень приветствуются.

Отредактировано: подробности разметки и CSS в ответ на комментарий

Соответствующий раздел скинафайл

<asp:Menu runat="server" DynamicHorizontalOffset="2" Orientation="Horizontal" SkipLinkText=""
    StaticPopOutImageUrl="~/App_Images/Themes/arrow_down.gif" DynamicPopOutImageUrl="~/App_Images/Themes/arrow_right.gif">
    <StaticMenuItemStyle CssClass="MenuDefaultMenuItemStyle" />
    <DynamicMenuItemStyle  CssClass="MenuDefaultMenuItemStyle" />

    <StaticSelectedStyle CssClass="MenuDefaultSelectedStyle" />
    <DynamicSelectedStyle CssClass="MenuDefaultSelectedStyle" />

    <StaticHoverStyle CssClass="MenuDefaultHoverStyle" />
    <DynamicHoverStyle CssClass="MenuDefaultHoverStyle" />
</asp:Menu>

<asp:Menu runat="server" SkinId="MenuVertical" DynamicHorizontalOffset="2" SkipLinkText=""
    StaticPopOutImageUrl="~/App_Images/Themes/arrow_right.gif" DynamicPopOutImageUrl="~/App_Images/Themes/arrow_right.gif">
    <StaticMenuItemStyle CssClass="MenuVerticalMenuItemStyle" />
    <DynamicMenuItemStyle  CssClass="MenuVerticalMenuItemStyle" />

    <StaticSelectedStyle CssClass="MenuVerticalSelectedStyle" />
    <DynamicSelectedStyle CssClass="MenuVerticalSelectedStyle" />

    <StaticHoverStyle CssClass="MenuVerticalHoverStyle" />
    <DynamicHoverStyle CssClass="MenuVerticalHoverStyle" />
</asp:Menu>

Таблица стилей

.MenuDefaultMenuItemStyle
{
    background-color: #D5DCE1;
    color: #234875;
    padding: 2px;
    width: 100%;
}

.MenuDefaultSelectedStyle
{
    background-color: #3C5778;
    color: #FFFFFF;
    padding: 2px;
    width: 100%;
}

.MenuDefaultHoverStyle
{
    background-color: #666666;
    color: #FFFFFF;
    padding: 2px;
    width: 100%;
}

.MenuVerticalMenuItemStyle
{
    background-color: #FFFFFF;
    border: 1px solid #D5DCE1;
    color: #234875;
    height: 30px;
    padding: 2px;
    width: 100%;
}

.MenuVerticalSelectedStyle
{
    background-color: #003366;
    border: 1px solid #D5DCE1;
    color: #FFFFFF;
    height: 30px;
    padding: 2px;
    width: 100%;
}

.MenuVerticalHoverStyle
{
    background-color: #EEEEEE;
    border: 1px solid #000000;
    color: #234875;
    height: 30px;
    padding: 2px;
    width: 100%;
}

Ответы [ 2 ]

32 голосов
/ 20 июля 2010

Если вы удалите атрибут controlRenderingCompatibilityVersion из web.config, режим по умолчанию для рендеринга меню неявно изменится с Table на List. Если вы все еще хотите, чтобы ваше меню отображалось с помощью табличных тегов, вам нужно явно указать это в элементе управления asp: меню, добавив атрибут RenderingMode:

<asp:Menu runat="server" RenderingMode="Table" ... >
   ...
</asp:Menu>

(с. Также раздел замечаний здесь в MSDN: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.menu.renderingmode.aspx)

3 голосов
/ 10 января 2014

У меня были проблемы, когда опубликованное меню отображалось странным образом. Добавление RenderingMode = "List" к разметке меню решило мои проблемы.

<asp:Menu runat="server" RenderingMode="List" ... >
   ...
</asp:Menu>
...