2008-10-17 64 views
2

我已经实现了一个使用ASP.Net 2.0中实现的回调结构的.NET Web控件。这是一个自动降低控件,它在IE 6.0/7.0和Google Chrome中正常工作。下面是相关的回调函数:ASP.NET 2.0回调在Firefox中无法正常工作

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

在Firefox中,“ARGS”始终是相同的数据,所以<div>这是我的下拉列表中显示始终显示的相同项目的innerHTML。我已经重新检查了我的客户端代码,正确的信息被发送到客户端 - >服务器,并返回server-> client。

值得注意的是,由.NET Framework创建的“WebForm_DoCallback”功能,下面的代码片段获取调用:

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; 
} 

和回调函数ReceiveServerData被称为上都xmlRequest.open("POST", theForm.action, true);xmlRequest.send(postData);。我想知道这是否会导致错误,但是我处于调试技能的末尾。

编辑添加 - 在第一次使用下拉菜单时,ReceiveServerData未被调用两次 - 事实上,下拉菜单对于第一次按键操作正确。它停止工作,并在第一次击键后用旧的返回数据使回调加倍。

回答

0

我不知道这是否会帮助,但我已经修补了ASP.NET 2.0回调像这(精缩代码):

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); 
      } 
     } 
    } 
} 

如果您检查实际执行WebForm_CallbackComplete,你会发现的几个问题。您可以尝试在窗体标记中粘贴该JavaScript,以查看它是否会产生影响。

0

我想你需要提供更多的信息,这可能不是由于asp.net的内置js。如何设置事件来捕捉按键,您是否意外添加事件?如何调用scriptservice?只需仔细检查所有的基本知识,以确保它不是那样疯狂和简单。