2012-04-10 122 views
3

這很奇怪。我說奇怪,因爲在IE 8和以上(以及FF)我的網站生成的Html.ActionLink()創建一個url正確的形式 - >http://mydomain.com/myapp/mycontroller/myaction在IE 7和IE8運行在兼容模式生成的網址如 - >http:///myapp/mycontroller/myaction。這也影響使用Url.Content()的任何內容。Internet Explorer 7 + MVC 3 =錯誤的網址?

這是一個問題,因爲我有用戶仍然堅持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") 

更新: 我發現了一個類似的項目處理這一問題在PHP中:Why can't I use relative URLs with IE7?

提到一對夫婦在網絡上的其他文章使用<base>標題標籤..現在試試這個。使用搜索「相關網址」「Internet Explorer 7」

+0

當呈現包含Html.ActionLink的頁面時,頁面源代碼中的URL是什麼樣子的?它看起來像/ Controller/Action還是以http:// domain/app/controller/action的形式出現? – 2012-04-10 13:06:54

+0

顯示您的Html.ActionLink()的代碼我相信您在其中包含域。 – HaBo 2012-04-10 13:21:10

+0

@Andy:嗯......這兩個來源(IE8在compat和non-compat模式中)呈現給/ Controller/Action,但瀏覽器正在解釋它,如上所述。 – 2012-04-10 13:22:57

回答

1

This works。我在WinXP模式下測試與IE 8在兼容模式下,以及在Internet Explorer 8中IE 7模式,IE 9,IE9 COMPAT,FF 11沒有傷害到我現有的JavaScript

對於剃刀:

@{ 
    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代碼。這是我的一個兼容補丁。