3 votes

Internet Explorer 7 + MVC 3 = mauvaises urls ?

C'est bizarre. Je dis bizarre parce que sur IE 8 et plus (ainsi que FF) mes urls générées par Html.ActionLink() créent une url dans la forme correcte -> http://mydomain.com/myapp/mycontroller/myaction mais sur IE 7 et IE8 fonctionnant en mode compatibilité, les urls sont générées comme -> http:///myapp/mycontroller/myaction . Cela affecte également tout ce qui utilise Url.Content().

C'est un problème car j'ai des utilisateurs qui s'accrochent encore à IE 7 (je ne comprends pas non plus). De plus, notre politique Active Directory a été paramétrée pour certains utilisateurs (pas tous) de manière à ce qu'IE 8 soit forcé en mode de compatibilité et ne puisse pas être désactivé. Cela annule également la balise méta de compatibilité.

Que dois-je vérifier dans MVC ? Est-ce qu'il y a un paramètre de web.config que je dois regarder ?

Code : Liens d'action :

@Html.ActionLink("My Text", "Action", "Controller", new { Param1 = Model.Param1 }, new { @class = "linkButton" })

Url.Content:
Url.Content("~/Content/openHS.png")

Mise à jour : J'ai trouvé un article similaire traitant de ce problème en PHP : Pourquoi ne puis-je pas utiliser des URL relatives avec IE7 ?

Quelques autres articles parus sur le web mentionnent l'utilisation de l'outil <base> La balise d'en-tête J'essaie maintenant. J'ai utilisé la recherche "relative urls" "Internet explorer 7"

1voto

Richard H Points 129

Cela fonctionne. J'ai testé en mode WinXP avec IE 8 en mode de compatibilité ainsi qu'avec Internet Explorer 8 en mode IE 7, IE 9, IE9 Compat, FF 11. Aucun dommage pour mon JavaScript existant.

Pour Razor :

@{
     string baseHref;

     if(this.Request.Browser.Type == "IE7" && !this.Request.UserAgent.Contains("Trident/5.0"))
     {
          baseHref = this.Request.Url.Scheme + "://" + this.Request.Url.Authority + Url.Content("~");
     }
     else 
     {
          baseHref = Url.Content("~");
     }
}

Ensuite, dans la partie supérieure du <head> :

<meta http-equiv="X-UA-Compatible" content="IE=9;IE=8;" />
<meta charset="utf-8" />
<base href="@(baseHref)"/>

Une explication sur ce qui précède : Trident/5.0 est le moteur de compatibilité d'IE 9 et semble permettre à IE9 d'interpréter les liens relatifs en fonction du domaine de la page au lieu de la base. Je suis sûr que vous pouvez supprimer le code Razor si vous le souhaitez. Il s'agissait pour moi d'un correctif de compatibilité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X