Mi menú ASP.NET no se ve en Internet Explorer 8: Solución rápida

Internet Explorer 8 ofrece una compatibilidad con los estándares de la W3C sin precedentes en los navegadores de Microsoft (incluso ha pasado el ACID2 test). Se trata de una gran noticia para los programadores Web ya que cuanto más estándar sean todos los navegadores menos esfuerzos para desarrollar interfaces pasaremos pues no hay que estar pegándonos para conseguir que funcione en todos ellos.

Por desgracia esta compatibilidad estricta hará que algunos sitios Web que funcionaban perfectamente en la versión anterior (la 7.0) de IE dejen de hacerlo ahora en la nueva versión, dado el modo diferente de tratar ciertos elementos (sobre todo CSS) que éste tenía. Esto es algo de lo que Microsoft es muy consciente y por eso ha incluído un modo de compatibilidad con IE7 en la última versión. Así, si entramos en una página que se veía perfectamente con IE7 pero ahora no vemos correctamente sólo tenemos que pulsar el botón a tal efecto colocado al lado de la barra de direcciones del navegador para conseguir que la página se renderice exactamente igual que se hacía antes, y problema resuelto:

Esto está bien cuando somos nosotros los usuarios, pero siendo programadores no es algo en lo que debamos confiar mucho. Quiero decir que va a ser mucho esperar que los usuarios de nuestras aplicaciones utilicen esta característica si nuestro sitio no se visualiza correctamente, ya que la mayoría ni siquiera sabrá que existe. Así que debemos ser proactivos y tratar de solucionar esos posibles problemas de visualización y no confiar en que el usuario pondrá la vista de compatibilidad.

La mayor parte de los controles Web que vienen con ASP.NET funcionan sin problemas con Internet Explorer 8. Pero hay uno que es especialmente problemático y que no funcionará tal y como viene de fábrica: el control Menu. Este control sirve para mostrar menús desplegables para navegar por nuestra aplicación.

Cuando añadimos un menú a un formulario Web y lo visualizamos con Internet Explorer 8 lo que pasará es que la parte desplegable del mismo se verá en blanco completamente, así:

Upps!, cosa mala.

¿Cómo podemos solucionarlo?

Obviamente una forma de conseguirlo es forzar que el navegador se comporte como lo hacía Internet Explorer activando desde nuestra página el modo de compatibilidad. Se puede hacer y seguramente lo explicaré en un próximo post, pero eso no deja de ser un "apaño" que deberíamos evitar pues no estamos solucionando el problema, sólo posponiéndolo.

Lo que tenemos que hacer es solucionarlo definitvamente y ello es más fácil de lo que parece. Si conocemos donde está el problema solucionarlo es inmediato. Según reconoce el propio equipo de ASP.NET el problema viene de que asumieron incorrectamente que el valor por defecto del estilo z-index (para posicionamiento vertical de los elementos en la página) de las capas que forman el menú desplegable era un valor concreto, cuando en realidad, según el estándar, este valor por defecto es "auto". El resultado es que IE8 sigue estrictamente el estándar y por lo tanto al no tener un z-index asignado la capa no se muestra.

Entonces, sabiendo esto, la solución es bien sencilla: apliquémosle un z-index a esa capa.

Asi, lo único que hay que hacer es crear un nuevo estilo en la página tal que así:

Como vemos lo único que hacemos es crear un estilo que asigna un valor de z-index. Cualquier valor mayor de 0 será suficiente, pero mejor ponerlo alto para asegurarnos de que las capas del menú pasan por encima de los demás elementos y que así siempre estarán visibles cuando se desplieguen.

Perfecto. Ahora sólo queda asignarle este estilo al control, para lo cual usaremos la propiedad CssStyle de su elemento DynamicMenuStyle:

A partir de ese momento el menú aplicará este estilo adicional a las capas de elementos adicionales (junto con cualquier otro que tuviésemos asignado para darle la estética deseada), y se verá perfectamente bajo IE8:

¡Listo!

Si queremos aplicárselo a todos los controles del mismo tipo podemos crear un archivo Tema de ASP.NET y definirlo dentro de un archivo .skin para reutilizarlo en todas las páginas.

Además, la gente de Microsoft ha sacado hace un mes unos parches para ASP.NET que solucionan, entre otros, este problema. Los podemos descargar desde aquí:

· Para Windows 2000, Windows XP y Windows Server 2003
· Para Windows Vista y Windows Server 2008

Aunque el título se refiere a parches para otras cosas más importantes, en ambos casos lleva incluida la solución al problema del que hablo en este post.

En un próximo post hablaré de cómo forzar el modo de compatibilidad en toda nuestra aplicación o en páginas concretas de la misma.

Espero que te resulte útil.

Archivado en:
Comparte este post:

Comentarios

# David said:

Gracias por la solución. Si que la necesitaba xd

Thursday, April 16, 2009 7:42 PM
# Alejandro said:

Gracias, me ayudó bastante lo que expusiste acá.

Thursday, April 16, 2009 8:34 PM
# Pas said:

El truco perfecto, ya se me visualizan correctamente las paginas con menús.

Saturday, May 02, 2009 11:39 AM
# Carina said:

Excelente ayuda.  Muy agradecida

Friday, May 08, 2009 4:05 AM
# salarcon said:

Ya hay un Hotfix que arregla esto y alguna otra cosilla.

support.microsoft.com/.../967535

Wednesday, May 13, 2009 10:34 AM
# Cuauh said:

Muchas gracias por compartirnos tus conocimientos

Friday, May 22, 2009 1:26 AM
# Alan Azabache said:

Oigan muchachos a mi no me funcionan :(

en mi estilos pongo eso del z-index

luego voy al menu de dynamicmenustyle y le agrego el cssclss y nada por que ah ?

Tuesday, June 02, 2009 11:06 PM
# Jose Visalot said:

Amigos, a mi tampoco me funciona... tiene que ver algo con la confirguracion del IE8.

la solución lo he puesto en una hoja de stilo y lo invoco y nada

Thursday, June 25, 2009 4:24 PM
# Roberto said:

Gracias tio esto es una pasada, es justo lo que he andaba buscando.

Thursday, July 02, 2009 8:17 PM
# Eduin Peñata said:

Excelente solucion, este tipo de ayudas son las que merecen ser linkeadas.

Gracias

Sunday, July 12, 2009 6:49 AM
# Andrés Arboleda said:

Les cuento algo a los que no les ha funcionado a ver si les sirve.

Yo primero cree el estilo en la hoja de estilos y luego lo referencie en el control y no me funciono.

Luego lo que hice fue crear el estilo directamente en la página donde esta el control como lo muestra el ejemplo, luego de el titulo de la página y luego lo referencie en el control y me funciono perfecto.

Gracias al que publico este articulo.

Tuesday, July 21, 2009 6:21 PM
# Rodrigo Guzman said:

Excelente lo que andaba buscando ....te pasaste :)

Thursday, July 30, 2009 5:23 AM
# jvinasco said:

Fué muy útil, sin esto no se que hubiera hecho pues ni idea por donde estaba el asunto. Gracias por haberlo compartido tan explicitamente.

Wednesday, August 05, 2009 1:42 AM
# Miguel said:

Muchas gracias. No nada como saber de que se habla.

Friday, September 18, 2009 2:21 PM
# FIDE said:

EXCELENTE APORTE.. FUE DE GRAN AYUDA.!!

Friday, October 02, 2009 1:51 AM
# Fer said:

Excelente, por fin  esta la solucion a eso...

Saludos.

Tuesday, October 13, 2009 8:18 PM
# Noe said:

Gracias, pero me funciono para IE8 pero pars que funcione en IE7 que puede ser, gracias.

saludos.

Friday, October 16, 2009 12:01 AM
# hencoz said:

excelente solucion!!!... saludos

Friday, November 06, 2009 3:19 PM
# ivan said:

gracias por tu aporte , me sirvio mucho precisamente no me salía eso...

Tuesday, November 17, 2009 2:12 PM
# Luly said:

Excelente!!! Muy buen aporte .... mil gracias!!!

Monday, November 23, 2009 5:41 PM
# Alex said:

Muchas gracias por tu post, no sabes el problema que me has solucionado!

Saludos!

Monday, November 23, 2009 10:48 PM
# Efrain Bentham said:

GRAN APORTE...ME AYUDO MUCHISIMO...DE VERDAD MUCHAS GRACIAS

Tuesday, December 15, 2009 3:14 PM
# Carlos Ramos - Lima Peru said:

Excelente y muy preciso, Graciasss

Sunday, December 20, 2009 9:08 PM
# Jeffer said:

Gracias por la solucion me ayudo mucho a hacer un menu multi-idioma,  ahora solo me falta poder cada control de los forms,, Saludos Master

Monday, January 18, 2010 2:13 AM
# Victor said:

Hola, muy bueno, pero se me presento otro problema  al desplegar las opciones del submenu el texto del mismo se sale de los limites del menu, como pordria solucionar este iconveniente

Wednesday, January 20, 2010 11:16 PM
# unamigo said:

genial muchas gracias

Thursday, January 21, 2010 9:05 PM
# Wilson said:

execelente esta ayuda me sirvio bastante...

Thursday, January 21, 2010 11:06 PM
# kajaa said:

no se ven las imagenes de google, ni los videos en yutube, el contenido del face ni nada D: ayudaa! D:

Wednesday, February 03, 2010 9:59 PM
# Samuel Bazan said:

Muy bueno el aporte, gracias!

Tuesday, February 09, 2010 4:41 PM
# Guillermo Serrano said:

Muchas gracias, muy bueno el post, muy detallado

Tuesday, February 09, 2010 6:42 PM
# Alex Ramirez said:

Muy bueno lo que comentastes se agradece

Wednesday, February 10, 2010 1:56 PM
# Planeta Web said:

Muchas gracias...

Wednesday, February 17, 2010 11:30 PM
# Chuy Lopez said:

Excepcional amigo.

Muchas gracias por la ayuda, ya me estaba volviendo loco con este problema.

Nuevamente gracias.

Monday, March 22, 2010 11:59 PM
# Carlos said:

Muchas gracias,

me solucionaste el problema

Saturday, May 01, 2010 9:02 PM
# felipe calderon said:

Muchas gracias.. la solucion funciona 100%

Friday, May 28, 2010 5:37 PM
# MIguel Machon said:

Gracias, excelente ayuda

Saturday, May 29, 2010 7:00 PM
# Roberto Fuenzalida said:

Muchas gracias por tu ayuda, solucione ese problema que me tenía complicado. Saludos cordiales.

Thursday, July 15, 2010 10:22 PM
# NJ said:

Gracias, Gracias, Gracias.... después de tantas horas buscándole :)  Saludos.

Friday, July 30, 2010 6:25 AM
# mony said:

EXCELENTE MIL GRACIAS !!!!

Wednesday, August 25, 2010 10:00 PM
# marvic172 said:

Gracias, muy buen ejemplo, att Geek de rango Mayor

Tuesday, September 21, 2010 3:51 AM
# Alfredo said:

Excelente solución, funciona 100%. Con esto me ahorré varios llamados telefónicos.

Friday, September 24, 2010 12:50 AM
# Fabiola said:

Buenisimo excelente solucioon mil gracias ;)

Friday, October 08, 2010 4:28 PM
# SnwBr said:

Excelente!! solucionó mi problema en un dos por tres.

Saturday, October 09, 2010 10:44 PM
# pumo said:

Excelente!! solucionó mi problema.

Prestar atención a todos los pasos, y funciona perfectamente.!!!!

Monday, November 08, 2010 1:04 PM
# Mauricio Avella said:

GRACIAS!!!!!!!!!!!!!!!!!!.... solucion en un minuto....

Wednesday, December 01, 2010 10:37 PM
# Edgardo mendoza said:

Gracias compañero, la verdad es que me habeis salvado la vida pibe pues hobre sos maldito

Sunday, December 05, 2010 4:56 PM
# Zelmar said:

Hola,

Hago una consulta adicional. No soy programador, solo usuario.

Tengo problemas para acceder a la información de un sitio web que utilizo habitualmente. Desde mi notebook accedo sin problemas pero desde otra máquina que suelo utilizar no accedo a ver los contenidos de ciertas consultas.

La web tiene páginas .aspx.

Cuando requiero la información la máquina como que piensa y de repente queda quieta y al pie se alcanza a leer LISTO.

Alguien sabe como puedo solucionarlo?

gracias.

Zelmar

Friday, February 11, 2011 11:14 AM
# Kely said:

Gracías,  realmente me funcionó.

Saludos

Saturday, April 30, 2011 6:01 AM
# hcanosalas said:

Genial, me saco de un apuro!!!

Friday, June 03, 2011 1:07 AM
# LuisMorillo said:

Excelente Post. Muchas gracias por la ayuda.

Saturday, July 09, 2011 4:16 PM