2010-06-17 7 views
26

W rzeczywistości migruję strony internetowe do ASP.NET 4.0, mając problemy z nowym renderowaniem elementów sterujących menu. Moje strony internetowe intensywnie korzystają z zagnieżdżonych menu. Stosowane są efekty unoszące, a układ jest definiowany przez kombinację kompozycji i skórek z połączonym CSS.ASP.NET 4.0 Problemy z renderowaniem z kontrolą menu po usunięciu controlRenderingCompatibilityVersion = "3.5"

Po usunięciu atrybutów controlRenderingCompatibilityVersion stron, nie są one już renderowane jako tabele zagnieżdżone, ale jako znaczniki ul/li. To łamie mój układ na wiele sposobów. Wszelkie zalecenia dotyczące migracji złożonego układu menu ASP.NET są bardzo mile widziane.

Zmieniano: Markup i dane CSS jako odpowiedzi na komentarz

odpowiedniej sekcji pliku skóry

<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%; 
} 
+0

Mam ten sam problem w dość prostym menu. Kolor tła CSS wydaje się być ignorowany dla elementów menu, które mają dzieci, a moje dopełnienie (mam ustawioną orientację poziomą) jest również ignorowane w przypadku elementów w menu głównym, z wyjątkiem między dwoma pierwszymi. –

+0

Czy dzieje się to również w przypadku .net 3.5, gdy ten atrybut zostanie usunięty? jeśli nie, to .net 4.0 może przyjmować inne (zdrowsze) podejście do HTML/CSS. Zgodnie z ogólną zasadą nie należy ufać programowi ASP.NET podczas generowania znaczników. Przyjmij pełną kontrolę nad nim i poznaj swoją drogę. Jeśli mógłbyś po prostu przepisać to, co masz jako prosty XHTML/CSS, poleciłbym tę ścieżkę zamiast hackować .netowe elementy sterujące. – synhershko

+0

@synhershko: Co masz na myśli mówiąc "Czy to samo dzieje się z .net 3.5?" W .net 3.5 ten atrybut jest bezsensowny i nie istnieje! Hackowanie .net control nie jest tutaj celem. Tim i ja podążaliśmy za najlepszymi praktykami z dnia wczorajszego (Zbuduj swój projekt za pomocą motywów, skórek i CSS). Powinna istnieć łatwa ścieżka migracji do najlepszych współczesnych praktyk. –

Odpowiedz

32

Jeśli usunąć atrybut controlRenderingCompatibilityVersion z sieci. domyślny tryb zmiany renderowania menu implicitely z Table na List. Jeśli nadal chcesz mieć swoje menu wykonane z tagami tabeli należy określić to jawnie w asp: kontrola menu dodając atrybut RenderingMode: (s. Również sekcję Uwagi tutaj w MSDN: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.menu.renderingmode.aspx)

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

3

Miałem problemy z dziwnym wyświetlaniem opublikowanego menu. Dodanie RenderingMode = "Lista" do znaczników menu rozwiązało moje problemy.

<asp:Menu runat="server" RenderingMode="List" ... > 
    ... 
</asp:Menu> 
Powiązane problemy