2008-10-17 11 views
2

J'ai implémenté un contrôle Web .NET qui utilise la structure de rappel implémentée dans ASP.Net 2.0. C'est un contrôle d'autodropdown, et cela fonctionne correctement dans IE 6.0/7.0 et Google Chrome. Voici la fonction de rappel pertinente:Les callbacks ASP.NET 2.0 ne fonctionnent pas correctement dans Firefox

function ReceiveServerData(args, context) 
{ 
document.getElementById(context).style.zIndex = 300; 
document.getElementById(context).style.visibility = 'visible'; 
document.getElementById(context).innerHTML = args; 
fixHover(context); 
} 

Dans Firefox, « args » est toujours les mêmes données, de sorte que le innerHTML du <div> qui est l'affichage de mon menu déroulant affiche toujours les mêmes éléments. J'ai doublechecked mon code côté client, et les bonnes informations sont envoyées client-> serveur et en retour serveur-> client.

Il convient de noter, dans la fonction « WebForm_DoCallback » créée par le framework .NET, l'extrait suivant devient appelé:

if (setRequestHeaderMethodExists) { 
xmlRequest.onreadystatechange = WebForm_CallbackComplete; 
callback.xmlRequest = xmlRequest; 
xmlRequest.open("POST", theForm.action, true); 
xmlRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
xmlRequest.send(postData); 
return; 
} 

et la fonction de rappel ReceiveServerData est appelée à la fois sur xmlRequest.open("POST", theForm.action, true); et xmlRequest.send(postData);. Je me demande si cela cause une erreur, mais je suis à la fin de mes compétences de débogage.

Modifié pour ajouter - ReceiveServerData n'est pas appelé deux fois la première fois que j'utilise la liste déroulante - en fait, la liste déroulante fonctionne correctement pour la toute première frappe. Il arrête de fonctionner et double le rappel avec les anciennes données de retour, après la première frappe.

Répondre

0

Je ne suis pas sûr que cela aiderait mais j'ai patché les callbacks ASP.NET 2.0 comme celui-ci (code minified):

function WebForm_CallbackComplete() 
{ 
    for(var i=0; i< __pendingCallbacks.length;i++) 
    { 
     var _f3=__pendingCallbacks[i]; 
     if(_f3 && _f3.xmlRequest && (_f3.xmlRequest.readyState==4)) 
     { 
      __pendingCallbacks[i]=null; 
      WebForm_ExecuteCallback(_f3); 
      if(!_f3.async) 
      { 
       __synchronousCallBackIndex=-1; 
      } 
      var _f4="__CALLBACKFRAME"+i; 
      var _f5=document.getElementById(_f4); 
      if(_f5) 
      { 
       _f5.parentNode.removeChild(_f5); 
      } 
     } 
    } 
} 

Si vous cochez la mise en œuvre effective de WebForm_CallbackComplete vous aurait repérer quelques questions . Vous pouvez essayer de coller ce JavaScript dans votre balise de formulaire pour voir si cela ferait une différence.

0

Je pense que vous avez besoin de fournir plus d'informations, il est probablement improbable que ce problème soit dû à js intégré de asp.net. Comment l'événement est-il configuré pour attraper des frappes, est-ce que vous ajoutez accidentellement des événements? Comment s'appelle le script service? Il suffit de vérifier toutes les bases pour s'assurer que ce n'est pas quelque chose de fou et simple comme ça.

Questions connexes