2010-06-17 5 views
26

In realtà sto migrando siti Web in ASP.NET 4.0, avendo problemi con il nuovo rendering dei controlli di menu. I miei siti Web utilizzano pesantemente i menu nidificati. Gli effetti al passaggio del mouse vengono utilizzati e il layout è definito da una combinazione di temi e skin con CSS collegato.ASP.NET 4.0 Problemi di rendering con il controllo menu dopo la rimozione di controlRenderingCompatibilityVersion = "3.5"

Se rimuovo l'attributo controlRenderingCompatibilityVersion, non vengono più visualizzati come tabelle nidificate, ma come tag ul/li. Questo rompe il mio layout in molti modi. Qualsiasi raccomandazione per una migrazione di un layout di menu ASP.NET complesso è molto gradita.

Modificato: Markup e dettagli CSS come risposta al commento

relativa sezione del file pelle

<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> 

di stile

.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

Ho lo stesso problema su un menù abbastanza semplice. Il colore di sfondo CSS sembra essere ignorato per gli elementi del menu che hanno figli, e il mio padding (ho impostato l'orientamento orizzontale) viene ignorato anche per gli elementi nel menu principale, tranne che tra i primi due. –

+0

Questo accade anche per .net 3.5 quando questo attributo viene rimosso? in caso contrario, quindi .net 4.0 potrebbe adottare un approccio diverso (più sano) all'HTML/CSS. Come regola generale, non fidarsi di ASP.NET per generare il markup. Assumi il pieno controllo su di esso e conosci il tuo modo di aggirarlo. Se potessi semplicemente riscrivere quello che hai come un semplice XHTML/CSS, consiglierei questo percorso invece di hackerare i controlli .net. – synhershko

+0

@synhershko: Cosa intendi con "Questo succede anche per .net 3.5?" In .net 3.5 questo attributo è insensato e non esiste! Hacking .net controls non è l'intento di nessuno qui. Tim e io abbiamo seguito le best practice di ieri (abbiamo creato il tuo design usando temi, skin e CSS). Ci dovrebbe essere un facile percorso di migrazione verso le migliori pratiche di oggi. –

risposta

32

Se si rimuove l'attributo controlRenderingCompatibilityVersion dal web. config la modalità predefinita per il rendering del menu cambia implicitamente da Table a List. Se si vuole ancora avere il vostro menu reso con tag table è necessario specificare questo esplicitamente nel vostro asp: controllo del menu aggiungendo l'attributo RenderingMode: (. S anche la sezione commenti qui in MSDN: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.menu.renderingmode.aspx)

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

3

Ho avuto problemi in cui un menu pubblicato reso in modo strano. L'aggiunta di RenderingMode = "Elenco" al menu markup ha risolto i miei problemi.

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