IE10 SCRIPT5009: '__doPostBack' - undefined
Я столкнулся с проблемой в IE10 с элементами управления ASP.NET, для которых требуется отправить сообщение JavaScript назад [например, ссылку).
Он правильно работает с версией IE9, а также с режимом совместимости IE10. Но в стандартном режиме IE10 он дает ошибку ниже.
SCRIPT5009: '__doPostBack' - undefined
[Я создал демонстрационный проект с простой кнопкой asp: link, которая перенаправляется на другую страницу.]
![IE10_error screen]()
Пробовал решение, но не работал у меня
Может ли кто-нибудь предложить исправить это?
Ответы
Ответ 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.
Ответ 3
В IE 10 есть проблемы:
Он не может распознать ссылки с _doPostBack [которые в основном видны на выходе HTML кнопки ASP Link]
Вы можете ссылаться на следующую ссылку для исправления:
http://ronniediaz.com/2013/02/07/ie10-imagebutton-_dopostback-undefined-bug-with-update-panel-script-manager/
Ответ 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, это может быть простое решение, в отличие от возможных новых ошибок, созданных при обновлении вашей платформы.