双回发问题
我有一个ASP.NET 1.1应用程序,并且试图找出为什么当我更改一个ComboBox时,该值用于填充另一个值(父子关系)时,会产生两个回发。
我已经检查并检查了代码,但找不到原因。
这两个都是以page_load结尾的调用栈
第一次回发(由ComboBox的自动回发生成)
回发调用堆栈http://www.juanformoso.com.ar/images/callstack1.jpg
第二次回发(这是我要查找发生这种情况的原因)
替代文字http://www.juanformoso.com.ar/images/callstack2.jpg
有什么建议吗?我可以检查什么?
解决方案
回答
我要寻找的第一件事是我们没有将第二个ComboBox的AutoPostBack属性设置为true。如果在属性设置为true的第二个组合中更改值,我相信它将在该控件上生成一个回发。
回答
我们是否可以共享任何代码?过去,使用双后背在经典的ASP中困扰着我很多,以至于最终促使我一劳永逸地切换到.NET的原因。每当我在.NET中遇到此类问题时,我都会转到每个CONTROL和每个PAGE元素(如加载,初始化,预渲染,单击,SelectedIndexChanged等),并放置一个断点。
即使我那里没有代码,我也会插入类似以下内容:
Dim i As Integer i = 0
通常,我可以指出一些我没想到的动作,并根据需要进行修复。我建议你在这里做。
祝你好运。
回答
检查Request.Form [" __ EVENTTARGET"]以查找启动回发的控件,该控件可以缩小范围。
查看调用栈和一些反射器(进入ASP.NET 2,我没有1.1方便),它看起来像SessionStateModule.PollLockedSessionCallback是HttpApplication启动例程的一部分。我很确定应用程序有可能被回收,为此我确定一个事件已写入事件日志中。
我唯一的其他建议是Fiddler或者客户端上的某些东西来捕获HTTP流量。
回答
此代码是一个非常具体的问题,我怀疑它对其他人是否有用,但是在这里:
如果满足条件,则向组合的`onchange'添加检查,如果满足条件,则会显式调用postback函数。
如果组合设置为" AutoPostback",则asp.net会再次添加回发调用,从而产生两次回发...
生成的html是这样的:
[select onchange="javascript: if (CustomFunction()){__doPostBack('name','')}; __doPostBack('name','')"]
回答
这是一篇非常古老的文章,但是人们仍然在寻找解决方案,就像我上周所做的一样。
就像Grengby所说的那样,双重事件是主要原因,但删除其中一个事件并非总是可行的选择。就我的情况而言,我必须解决此问题,因此我不得不在第三方的申请中解决此问题。
我在母版页上添加了以下脚本并修改了ASP表单:
<script>var Q = 0;</script> <form id="Form1" runat="server" onsubmit="Q++; if(Q==1){return true;} else { return false;}">
这似乎可行,请转发评论。
阿伦
http://www.velocityreviews.com/forums/t117900-asp-net-multiple-postback-issue.html