我有一个ASP.NET 1.1应用程序,我试图找出为什么当我更改一个用于填充另一个值(父子关系)的ComboBox时,会产生两个回发。
我检查并检查了代码,但我找不到原因。
以下是以page_load结尾的两个调用堆栈
第一次回发(由ComboBox的autopostback生成)
Postback call stack http://www.juanformoso.com.ar/images/callstack1.jpg
第二次回发(这就是我想找到它为什么会发生的事情)
alt text http://www.juanformoso.com.ar/images/callstack2.jpg
有什么建议吗?我可以检查什么?
答案 0 :(得分:4)
这个代码是一个非常具体的问题,我怀疑它对其他人有用,但在这里它是:
检查已添加到组合的onchange
中,并带有if,如果满足条件,则会显式调用回发函数。
如果组合设置为AutoPostback
,则asp.net再次添加回发调用,产生两个回发...
生成的html是这样的:
[select onchange="javascript: if (CustomFunction()){__doPostBack('name','')}; __doPostBack('name','')"]
答案 1 :(得分:0)
我要寻找的第一件事是你没有将第二个ComboBox的AutoPostBack属性设置为true。如果你改变第二个组合中的值,该属性设置为true,我相信它会在该控件上生成一个回发。
答案 2 :(得分:0)
你有可以分享的代码吗?双重帖子在当天困扰我的经典ASP,这最终促使我一劳永逸地切换到.NET。每当我遇到.NET这样的问题时,我都会去每个CONTROL和每个PAGE元素,比如load,init,prerender,click,SelectedIndexChanged等,并设置一个断点。
即使我没有代码,我也会插入类似的内容:
Dim i As Integer
i = 0
我通常能够确定一些我没想到的动作,并根据需要进行修复。我建议你这样做。
祝你好运。答案 3 :(得分:0)
检查Request.Form [“__ EVENTTARGET”]以找到启动回发的控件 - 这可能会帮助您缩小范围。
查看callstacks,以及一些Reflectoring(进入ASP.NET 2 - 我没有1.1方便) - 看起来SessionStateModule.PollLockedSessionCallback是HttpApplication启动例程的一部分。您的应用可能正在被回收 - 我非常确定将事件写入事件日志中。
我唯一的其他建议是Fiddler或客户端上的东西来捕获HTTP流量。
答案 4 :(得分:0)
这是一篇非常古老的帖子,但人们仍然在寻找与上周完全相同的解决方案。
就像格兰比说的那样,Double事件是主要原因 - 但是删除其中一个事件并不是一个选择。至少在我的情况下,我必须在第三方的申请中解决这个问题。
我在主页上添加了以下脚本并修改了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