2012-04-10 10 views
3

これは奇妙です。私は奇妙だと言う理由はIE8以上で(FFでも)Html.ActionLink()によって生成されたURLが正しい形式でURLを生成するからです - >http://mydomain.com/myapp/mycontroller/myactionしかし、IE7とIE8ではが互換モードで動作していますas->http:///myapp/mycontroller/myaction。これは、Url.Content()を使用するものにも影響します。Internet Explorer 7 + MVC 3 =不正なURLですか?

これは私がまだ愛する人生のためにIE 7を握っている(私はどちらもそれを得ていない)ので、これは心配です。さらに、私たちのActive Directoryポリシーには、一部のユーザー(すべてではない)に設定されているものがあり、IE 8は互換モードに強制され、オフにできません。互換性のメタタグもオーバーライドします。

MVC内でここでチェックする必要があるのは何ですか?私が見なければならないweb.config設定がありますか?

コード: アクションリンク:

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

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

更新:Why can't I use relative URLs with IE7?

言及したウェブの周りの他の記事のカップル:私は同様の項目はPHPでこの問題を扱った <base>ヘッダータグを使用しています。これを今すぐ試してください。検索 "相対URL" "インターネットエクスプローラ7"を使用

+0

Html.ActionLinkを含むページがレンダリングされると、ページソースのURLはどのように見えますか?それは/ Controller/Actionのように見えますか、http:// domain/app/controller/actionの形式ですか? –

+0

あなたのHtml.ActionLink()のコードを表示する私はあなたがそれにドメインを含めると信じています。 – HaBo

+0

@Andy:Hmm .../Controller/Actionにレンダリングされた両方のソース(IE8は互換モードと非互換モードの両方)ですが、ブラウザはこれを上記のように解釈しています。 –

答えて

1

これは動作します。私はカミソリのために私の既存のJavaScript

に互換モードでだけでなく、Internet Explorer 8のIE 7モード、IE 9、IE9のcompat、FF 11にIE 8でWinXPのモードに害をテストしていない:

@{ 
    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("~"); 
    } 
} 
その後 <head>の上で

:上記の

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

一つの説明:トライデント/ 5.0はIE 9の互換性エンジンであり、IE9ではなく、ベースのページドメインに応じた相対リンクを解釈することができているようです。あなたが選択したならば、あなたはRazorコードを削除できると確信しています。これは私のための互換性パッチでした。

関連する問題