IE10 SCRIPT5009: ‘__doPostBack’ non è definito

Sto affrontando un problema su IE10 con controlli ASP.NET che richiede il postback di JavaScript [come, pulsante di collegamento].

Funziona correttamente con la versione IE9 e con la modalità di compatibilità IE10. Ma sulla modalità standard IE10, sta dando un errore inferiore. SCRIPT5009: ‘__doPostBack’ non è definito

[Ho creato un progetto demo con un semplice asp: pulsante di collegamento che reindirizza a un’altra pagina.] Schermata IE10_error

Ho provato la soluzione, ma non ha funzionato per me

Qualcuno può suggerire la correzione per questo?

Apparentemente c’è un bug nei file di definizione del browser forniti con .NET 2.0 e .NET 4. I file di definizione non soddisfano IE10 come una versione del browser e quindi sono predefiniti a una definizione predefinita che non supporta JavaScript.

Scott Hanselman ha una descrizione molto dettagliata di questo problema qui: http://www.hanselman.com/blog/BugAndFixASPNETFailsToDetectIE10CausingDoPostBackIsUndefinedJavaScriptErrorOrMaintainFF5ScrollbarPosition.aspx

Scott propone due soluzioni, la prima è quella consigliata:

1. Correzione a livello di macchina Scaricare e installare un aggiornamento rapido sul server:

2. Correzione del solo sito Installare il pacchetto App_BrowsersUpdate da NuGet nel proprio sito Web per importare nuove definizioni di browser ie e firefox.

Se hai provato la correzione e vedi ancora l’errore in IE11, l’aggiornamento del framework .net su 4.5 funzionerebbe.

IE 10 ha problemi:

Non può riconoscere i collegamenti con _doPostBack [che sono fondamentalmente visti nell’output HTML del pulsante di collegamento ASP]

Puoi fare riferimento al seguente link per la correzione:

http://ronniediaz.com/2013/02/07/ie10-imagebutton-_dopostback-undefined-bug-with-update-panel-script-manager/

Essenzialmente ciò che sta succedendo è che ci sono 2 elementi nascosti html mancanti “eventtarget” e “eventargument”, così come una funzione mancante “__doPostBack”.

Questi mancano dal DOM.

Ho provato tutte le correzioni elencate per questo e nessuno ha funzionato. Tuttavia, usando una combinazione di jquery e javascript, c’è una soluzione discreta. Aggiungi questo al tuo javascript sul documento pronto e sei fuori per le gare (Questa è un’alternativa molto più rapida rispetto all’installazione di .net framework 4.5 sul tuo server, anche se se puoi installare 4.5 questo è il modo di andare):

 if ($('#__EVENTTARGET').length <= 0 && $('#__EVENTARGUMENT').length <= 0) { $('#YOUR_ASPNET_FORMID').prepend(''); } 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(); } }; } 

Capisco che alcune di queste installazioni 4.5 risolvano questo problema. Lo consiglierei sicuramente. Tuttavia, se siete come me che lavoro su un sito pubblico di fronte al pubblico con un sistema cms cotto in .net 4, questa potrebbe essere una soluzione più semplice, piuttosto che introdurre nuovi bug creati dall’aggiornamento della vostra piattaforma.