ASP.NET 4.0 problemi di Rendering con il menu di controllo dopo la rimozione di controlRenderingCompatibilityVersion=“3.5”

Sono in realtà la migrazione di siti web ASP.NET 4.0, avendo problemi con il rendering dei controlli di menu. I miei siti web fanno uso di menu secondari. Effetti al passaggio del mouse vengono utilizzati e il layout è definito da una combinazione di temi e skin con CSS collegato.

Se io rimuovere le pagine controlRenderingCompatibilityVersion attributo, non sono più reso come tabelle nidificate, ma come ul/li Tags. Questo rompe il mio layout in molti modi. Le raccomandazioni per una migrazione di un complesso ASP.NET layout del menu sono molto benvenuti.

Modifica: Markup e CSS dettagli come risposta al commento

Apposita sezione del file di interfaccia

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

Foglio 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%;
}
  • Ho lo stesso problema su un semplice menu. Il CSS background-color sembra essere ignorato per il menu elementi che hanno bambini, e il mio imbottitura (io sono in posizione Orizzontale è stato ignorato per gli elementi del menu principale, ad eccezione tra i primi due.
  • Questo accade anche per .net 3.5 quando questo attributo viene rimosso? se non, allora .net 4.0 può essere l’assunzione di un diverso (e più sano) di HTML/CSS. Come regola generale, non si fidano ASP.NET sulla generazione di markup. Assumere il pieno controllo su di esso, e conoscere il vostro modo intorno ad esso. Se si potesse riscrivere quello che hai come un semplice XHTML/CSS, ti consiglio questo percorso, invece di hacking .net controlli.
  • Cosa intendi con “questo accade anche per .net 3.5?” In .net 3.5 questo attributo è priva di senso e non esiste! Hacking .net controlli è nessuno intenzione qui. Tim e ho seguito ieri le best practice (Costruito il vostro disegno utilizzando temi, skin e CSS). Ci dovrebbe essere un percorso di migrazione semplice al giorno d’oggi le migliori pratiche.
  • Non ho familiarità con questo attributo, così ho pensato di chiedere questo in un commento. Per quanto riguarda un percorso di migrazione semplice – beh, di solito non esiste nella ASP.net mondo. WebForms sono in modo non standard e la produzione di un brutto markup (almeno nella versione 2.0 che sono più familiarità con), sarei sorpreso se si trova un modo semplice per fare questo.
  • potresti postare il mark up del vostro menù con controlRenderingCompatibilityVersion set di attributi e anche il css..
  • Vi ringrazio molto!



2 Replies
  1. 32

    Se si rimuove il controlRenderingCompatibilityVersion attributo dal web.config la modalità di default per visualizzare il menu cambia il valore da Table per List. Se si vuole ancora avere il menu reso con tag di tabella, è necessario specificare in questo caso in asp:menu di controllo aggiungendo il RenderingMode attributo:

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

    (s. anche la sezione osservazioni qui in MSDN: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.menu.renderingmode.aspx)

  2. 3

    Io ho avuto problemi in cui la pubblicazione di un menu reso stranamente. L’aggiunta di RenderingMode=”List” per il menu di markup risolto i miei problemi.

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

Lascia un commento