双回发问题

时间:2020-03-05 18:41:36  来源:igfitidea点击:

我有一个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