我有一个 ASP.NET 1.1 应用程序,我试图找出为什么当我更改 ComboBox 的值用于填充另一个值(父子关系)时,会产生两个回发。

我查了又查代码,也没找到原因。

这是两个以 page_load 结尾的调用堆栈

第一次回发(由 ComboBox 的自动回发生成)

回发调用堆栈 http://www.juanformoso.com.ar/images/callstack1.jpg

第二次回发(这就是我想找出发生这种情况的原因)

替代文本 http://www.juanformoso.com.ar/images/callstack2.jpg

有什么建议吗?我可以检查什么?

有帮助吗?

解决方案

这是这段代码的一个非常具体的问题,我怀疑它对其他人是否有用,但这里是:

支票已添加到组合中 onchange 使用 if,如果满足条件,则显式调用回发函数。如果组合设置为 AutoPostback, ,asp.net再次添加了回发调用,产生了两个回发...

生成的html是这样的:

[select onchange="javascript: if (CustomFunction()){__doPostBack('name','')}; __doPostBack('name','')"]

其他提示

我要查找的第一件事是您没有将第二个 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 流量。

这是很旧的帖子,但人们仍在寻找与我上周完全相同的解决方案。

正如格伦比所说,双重事件是主要原因 - 但删除其中一个并不总是一种选择。至少就我的情况而言,我必须在第 3 方的应用程序中解决此问题。

我在母版页上添加了以下脚本并修改了 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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top