在ASP.NET 4.0站点中设置X-UA兼容的元标记不起作用

时间:2010-07-30 01:47:39

标签: asp.net-4.0 ie8-compatibility-mode

据我了解,您可以告诉IE8(我假设更高版本)如何最好地呈现您的页面。

这很有用,因为该页面可能是针对IE7,怪异模式或针对IE8标准模式而设计的。正如我所知,IE8遇到页面时的默认行为是在IE8标准模式下呈现(不知道它如何解释DOCTYPE)。使用此默认设置,用户可以通过单击刷新按钮旁边的“兼容性视图”按钮来更改渲染模式。

很高兴为用户提供一些控制权,但是当您知道您的网站只能使用IE7或其他任何东西时,它会很糟糕。在这种情况下,您不希望让用户做出错误的选择,并且这是网站告诉> = IE8浏览器如何呈现页面的能力非常有用。

您只需在head标记内提供X-UA-Compatible元标记即可。 Web上有大量的参考资料如何执行此操作以及可以使用哪些值。记得把它作为第一个。

<html xmlns="http://www.w3.org/1999/xhtml">
  <head  id="Head1" runat="server">
    <meta http-equiv="X-UA-Compatible" content="IE=7" />

好的,所以到目前为止还没什么新东西 - 但是它对我的ASP.NET项目不起作用?我已经尝试过其他几个项目和同样的问题。

是否有一种情况因为我使用Visual Studio等开发人员工具,IE已被配置为始终显示“兼容性视图”按钮以进行调试?我知道在这里抓稻草。

2 个答案:

答案 0 :(得分:0)

我发现了为什么会这样。

似乎ASP.NET的主题正在干扰。查看rendred输出时,主题中有一个动态插入的样式表标记(每个标记一个)。

ASP.NET主题引擎将这些项目插入到X-UA-Compatible元标记之上,从而打破了IE期望将其作为head元素中的第一个标记。

这是一个在源代码中包含主题和以下内容的ASP.NET站点:

<html xmlns="http://www.w3.org/1999/xhtml"> 
  <head  id="Head1" runat="server"> 
    <meta http-equiv="X-UA-Compatible" content="IE=7" />

将按如下方式呈现:

<html xmlns="http://www.w3.org/1999/xhtml"> 
  <head id="ctl00_Head1"> 
    <link href="App_Themes/White/Default.css" type="text/css" rel="stylesheet" />
    <meta http-equiv="X-UA-Compatible" content="IE=7" />

这似乎是一个小错误。我将为它创建一个MS Connect问题。

答案 1 :(得分:0)

这个here有一个有趣的解决方法。我将包含要点,以使其更容易:

  

“styleSheetTheme”设置始终将其CSS文件放在标题中   在其他任何事情之前的顶部。之前移动“X-UA兼容”   它,您必须执行以下操作:

     
      
  1. 通过为服务器代码提供一个ID并添加“runat”属性,使元标记可以访问:      ......
  2.   
  3. 将以下预渲染事件处理程序添加到您的页面(或母版页):
  4.   
protected void Page_PreRender(object sender, EventArgs e)
{
    Control MyFirstCtrl = Page.Header.FindControl("FirstCtrlID");
    Page.Header.Controls.Remove(MyFirstCtrl);
    Page.Header.Controls.AddAt(0, MyFirstCtrl);
}
  

你可以通过这种方式移动标题中的任何东西   你在那里明确定义。