模态对话框和__doPostback无限循环

时间:2011-04-12 18:38:12

标签: c# jquery asp.net postback

我有一个使用ModalPopupExtender创建的模态对话框。使用Webservices和JQuery模板在其中创建了一个UI。还有一个隐藏的ASP.NET按钮,它使用__doPostback()技术从javascript调用。 javascript隐藏模态弹出窗口,并在按钮上调用__doPostback(在ModalPopupExtender内部)

我使用这种技术来传递一些来自javascript的参数。服务器端事件处理程序执行一些处理并转移到页面(在某些情况下,返回自身)

当它转移到的页面是另一个页面时,它工作正常,但如果它转移到同一页面,则回发会一遍又一遍地发生,直到堆栈爆炸。

当我回发到同一页面时,如何停止重新发生回发。我想这不会在第一次发生,因为它发布到不同的页面并且回发无效。

代码样本很难提供,因为它是一个相当复杂的系统,很难将它分开。

我知道这听起来很可怕,但我想用javascript调用服务器端函数和一些变量。有更好的方法吗?

3 个答案:

答案 0 :(得分:1)

好吧,你回发了,所以你可以对你的标记进行服务器端控制。只需将您的重新发布的javascript粘贴到容器中,并且在页面发布到自身的情况下,隐藏该容器,使其不会加载到页面中....

那或你可以做客户端cookie或查询字符串参数。两者都可能不稳定。

答案 1 :(得分:1)

如果没有代码示例,我只能推测并希望指向正确的方向。

当您转移到新页面时,旧页面(以及该页面上的javascript)超出范围,因此不会继续执行。但是,如果重新加载页面并且继续调用__doPostback的条件,那么您已创建导致问题的循环引用。在调用__doPostback之前,但是当您仍在客户端时,您需要清除可能导致事件链的任何条件。

如果您无法发现调用事件链的内容,那么您可能会考虑转而返回到同一页面转移到新页面(bounce.aspx),然后再调用response.redirect返回页面,以便它在重新加载时不是Postback,而是页面的新实例。 (是的,这是一个kludge,但它可能是一个有效的止差......)

干杯,

CEC

答案 2 :(得分:0)

感谢您的回复。我想我找到了解决方案。

在服务器端回调中,我这样做:

setupPage();
Server.Transfer("mypage.aspx", true);

将其更改为:

setupPage();
Server.Transfer("mypage.aspx");

解决了这个问题。

SetupPage()将所有数据存储在隐藏字段中,我认为保留表单状态是必要的,以便在传输后保留。这似乎不是这种情况,因为我在传输之前在页面中完成的所有设置似乎仍然存在。

奇怪或者我误解了.NET的基本内容

编辑 - 是的,我对.NET有很多误解。它有时让我头疼。

感谢您的帮助