Подтвердить что ты не робот

ASP.NET 4.0 Рендеринг проблем с помощью элемента управления меню после удаления controlRenderingCompatibilityVersion = "3.5"

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

Если я удаляю атрибут controlRenderingCompatibilityVersion для страниц, они больше не отображаются как вложенные таблицы, а как ul/li Tags. Это нарушает мой макет во многих отношениях. Любые рекомендации по миграции сложного макета меню 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>

Stylesheet

.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%;
}
4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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