3

这很奇怪。我说很奇怪,因为在 IE 8 及更高版本(以及 FF)上,我由 Html.ActionLink() 生成的 url 以正确的形式创建了一个 url -> http://mydomain.com/myapp/mycontroller/myaction 在 IE 7 上和 IE8 在兼容模式下运行的 url 生成为 -> 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>标题标签..现在试试这个。使用搜索“相对网址”“Internet Explorer 7”

4

1 回答 1

1

这行得通。我在 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)"/>

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

于 2012-04-12T13:16:08.947 回答