Установка метатега, совместимого с X-UA, на сайте ASP.NET 4.0 не работает

Насколько я понимаю, вы можете указать IE8 (и, как я предполагаю, более поздние версии), как лучше отображать вашу страницу.

Это полезно, поскольку страница могла быть разработана для IE7, специального режима или для стандартного режима IE8. Насколько я знаю, поведение по умолчанию для IE8, когда он сталкивается со страницей, заключается в отображении в стандартном режиме IE8 (хотя я не уверен, как он интерпретирует DOCTYPE). По умолчанию пользователь может изменить режим рендеринга, нажав кнопку «Вид в режиме совместимости» рядом с кнопкой обновления.

Это хорошо, чтобы дать пользователю некоторый контроль, но плохо, когда вы знаете, что ваш сайт хорошо отображается только с IE7 или чем-то еще. В этом случае вы не хотите, чтобы пользователь сделал неправильный выбор, и именно здесь очень полезна возможность веб-сайта сообщить браузеру >= IE8, как отображать страницу.

Вам просто нужно указать метатег X-UA-Compatible внутри тега head. В Интернете есть множество ссылок, как это сделать и какие значения можно использовать. Не забудьте сделать его первым.

<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 настроен на постоянное отображение кнопки «Просмотр в режиме совместимости» для целей отладки? Хвататься за соломинку здесь я знаю.


person Jaans    schedule 30.07.2010    source источник


Ответы (2)


Я узнал, почему это происходит.

Кажется, что тематика ASP.NET мешает. При просмотре отрендеренного вывода есть динамически вставленный тег для таблицы стилей (по одному для каждого) из темы.

Тематический движок ASP.NET вставляет эти элементы над метатегом, совместимым с X-UA, тем самым нарушая ожидания 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.

person Jaans    schedule 30.07.2010
comment
Вот ссылка на проблему с MS Connect: connect.microsoft.com/VisualStudio/feedback/details/581278 Голосуйте за него, если согласны. - person Jaans; 30.07.2010
comment
Три года спустя, новая версия Visual Studio, а эта ужасная ошибка все еще существует, вызывая у нас проблемы с CSS (в IE8). И Microsoft решила не исправлять это. Шокирующий. - person Mike Gledhill; 26.04.2013

здесь есть интересный обходной путь. Я включу суть, чтобы сделать его проще:

Параметр «styleSheetTheme» всегда помещает свой файл CSS в заголовок вверху перед чем-либо еще. Чтобы переместить «X-UA-Compatible» перед ним, вам нужно будет сделать следующее:

  1. Сделайте метатег доступным из кода сервера, присвоив ему идентификатор и добавив атрибут runat: ...
  2. Добавьте следующий обработчик событий перед отрисовкой на свою страницу (или главную страницу):
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);
}

Вы можете перемещать вещи в заголовке таким образом для всего, что вы явно определяете там.

person Walt Daniels    schedule 03.12.2013