asp.net - IE10 SCRIPT5009: ''__doPostBack'' no está definido
internet-explorer-10 (4)
Me enfrenta un problema en IE10 con los controles ASP.NET que requieren una publicación de JavaScript [como, botón de enlace].
Está trabajando correctamente en la versión IE9, así como en el modo de compatibilidad IE10. Pero en el modo estándar IE10, está dando el error debajo. SCRIPT5009: ''__doPostBack'' no está definido
[He creado un proyecto de demostración con un simple asp: botón de enlace que redirige a otra página].
Intenté la solución, pero no funcionó para mí
¿Alguien puede sugerir una solución para esto?
Aparentemente hay un error en los archivos de definición del navegador que se incluyen con .NET 2.0 y .NET 4. Los archivos de definición no dan cabida a IE10 como una versión de navegador y, por lo tanto, se predetermina a una definición predeterminada que no admite JavaScript.
Scott Hanselman tiene una descripción muy detallada sobre este tema aquí: http://www.hanselman.com/blog/BugAndFixASPNETFailsToDetectIE10CausingDoPostBackIsUndefinedJavaScriptErrorOrMaintainFF5ScrollbarPosition.aspx
Scott propone dos soluciones, siendo la primera recomendada:
1. Solución para toda la máquina Descargue e instale una revisión en el servidor:
- .Net 4 ( http://support.microsoft.com/kb/2600088 )
- .Net 2 ( http://support.microsoft.com/kb/2600100 , http://support.microsoft.com/kb/2608565 )
2. App_BrowsersUpdate
solo para el sitio Instale el paquete App_BrowsersUpdate
de NuGet en su sitio web para importar nuevas definiciones de navegador ie y firefox.
Esencialmente, lo que sucede es que faltan 2 elementos ocultos html "eventtarget" y "eventargument", así como una función faltante "__doPostBack".
Estos faltan en el DOM.
Intenté todas las correcciones enumeradas para esto y ninguna funcionó. Sin embargo, usando una combinación de jquery y javascript hay una solución discreta. Agregue esto a su javascript en el documento listo y estará listo para las carreras (Esta es una alternativa mucho más rápida que la instalación de .NET Framework 4.5 en su servidor, aunque si puede instalar 4.5, ese es el camino a seguir):
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();
}
};
}
Entiendo que parte de dicha instalación 4.5 corrige esto. Definitivamente lo recomendaría. Sin embargo, si usted es como yo trabajando en un sitio público de la empresa con un sistema cms cocido en .NET 4, esto podría ser una solución más sencilla, en lugar de introducir nuevos errores creados al actualizar su plataforma.
IE 10 tiene problemas:
No puede reconocer los enlaces con _doPostBack [que se ven básicamente en el resultado HTML del botón de enlace ASP]
Puede consultar el siguiente enlace para la corrección:
Si ha probado la solución y todavía está viendo el error en IE11, la actualización del .NET Framework a 4.5 funcionaría.