这很奇怪。我说很奇怪,因为在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”
答案 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代码。这是我的兼容性补丁。