Подтвердить что ты не робот

IE10 SCRIPT5009: '__doPostBack' - undefined

Я столкнулся с проблемой в IE10 с элементами управления ASP.NET, для которых требуется отправить сообщение JavaScript назад [например, ссылку).

Он правильно работает с версией IE9, а также с режимом совместимости IE10. Но в стандартном режиме IE10 он дает ошибку ниже. SCRIPT5009: '__doPostBack' - undefined

[Я создал демонстрационный проект с простой кнопкой asp: link, которая перенаправляется на другую страницу.] IE10_error screen

Пробовал решение, но не работал у меня

Может ли кто-нибудь предложить исправить это?

4b9b3361

Ответ 1

По-видимому, ошибка в файлах определения браузера, поставляемых с .NET 2.0 и .NET 4. Файлы определения не поддерживают IE10 как версию браузера и, следовательно, по умолчанию используют определение по умолчанию, которое не поддерживает JavaScript.

Скотт Гензельман очень подробно рассказывает об этой проблеме: http://www.hanselman.com/blog/BugAndFixASPNETFailsToDetectIE10CausingDoPostBackIsUndefinedJavaScriptErrorOrMaintainFF5ScrollbarPosition.aspx

Скотт предлагает два решения, первый из которых рекомендуется:

1. Обшивка машины Загрузите и установите исправление на сервер:

2. Исправление только для сайта Установите пакет App_BrowsersUpdate из NuGet на свой веб-сайт, чтобы импортировать новые определения браузера ie и firefox.

Ответ 2

Если вы испробовали исправление, и вы все еще видите ошибку в IE11, будет работать обновление .net framework до 4.5.

Ответ 4

По существу, происходит то, что есть 2 отсутствующих скрытых элемента html "eventtarget" и "eventargument", а также отсутствующую функцию "__doPostBack".

Они отсутствуют в DOM.

Я попробовал все исправления, перечисленные для этого, и никто не работал. Однако при использовании комбинации jquery и javascript существует ненавязчивое решение. Добавьте это в свой javascript на готовый документ, и вы отправитесь на гонки (это гораздо более быстрая альтернатива, чем установка .net framework 4.5 на вашем сервере, хотя если вы можете установить 4.5, это путь):

if ($('#__EVENTTARGET').length <= 0 && $('#__EVENTARGUMENT').length <= 0) {
  $('#YOUR_ASPNET_FORMID').prepend('<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /><input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />');
}

if (typeof __doPostBack == 'undefined') {
  __doPostBack = function (eventTarget, eventArgument) { 
    var theForm = document.forms['YOUR_ASPNET_FORMID'];
    if (!theForm) {
      theForm = document.YOUR_ASPNET_FORMID;
    }
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
      theForm.__EVENTTARGET.value = eventTarget;
      theForm.__EVENTARGUMENT.value = eventArgument;
      theForm.submit();
    }
  };
}

Я понимаю, что некоторые из указанных исправлений 4.5 исправляют это. Я определенно рекомендовал бы это. Однако, если вы похожи на меня, работая на общедоступном веб-сайте предприятия с помощью системы cms, испеченной в .net 4, это может быть простое решение, в отличие от возможных новых ошибок, созданных при обновлении вашей платформы.