Internet Explorer 7 + MVC 3 =糟糕的网址?

时间:2012-04-10 12:56:35

标签: asp.net-mvc-3 internet-explorer

这很奇怪。我说很奇怪,因为在IE 8及更高版本(以及FF)上,我的Html.ActionLink()生成的网址以正确的形式创建了一个网址 - >在兼容模式下运行的IE 7和IE8上http://mydomain.com/myapp/mycontroller/myaction ,网址生成为 - > http:///myapp/mycontroller/myaction。这也会影响使用Url.Content()的任何内容。

这是一个令人担忧的问题,因为我的用户仍然坚持使用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>标头标签..现在尝试这个。使用搜索“relative urls”“Internet explorer 7”

1 个答案:

答案 0 :(得分:1)

这很有效。我在WinXP模式下使用IE 8在兼容模式以及Internet Explorer 8 IE 7模式,IE 9,IE9 Compat,FF 11中进行了测试。对我现有的JavaScript没有任何影响

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("~");
     }
}

然后在<head>

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

上面的一个解释:Trident / 5.0是IE 9的兼容性引擎,似乎允许IE9根据页面域而不是基础来解释相对链接。如果您愿意,我相信您可以删除Razor代码。这是我的兼容性补丁。