ASP.NET AJAX很奇怪

时间:2010-06-02 17:49:40

标签: asp.net ajax asynchronous

好吧,我认为我很了解这些主题,但我想不是,所以希望有人可以清楚这一点。

Page.IsAsync似乎被打破了。它总是返回false。

但ScriptManager.IsInAsyncPostBack似乎有效。

在UpdatePanels内的控件往返过程中返回true。这很好;我可以判断它是部分回发还是常规回发。

然而,对于异步页面方法,ScriptManager.IsInAsyncPostBack返回false。为什么是这样?这不是常规的回发,我只是在页面上调用公共静态方法。

它会导致问题,因为我也意识到如果你有一个AutoPostBack = false的控件,它不会自己触发回发,但如果它在页面上有一个事件处理程序,那么该事件处理程序代码将运行在下一个回发中,无论回发如何发生,如果值已更改。 即如果我调整一个下拉菜单然后点击一个按钮,该下拉列表的处理程序代码将会触发。这没关系,除了它也会在Page Method调用期间发生,我无法知道其中的区别。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

正如Tjaart指出的那样,Page.IsAsync与AJAX无关!有关IsAsync的更多信息,请参阅MSDN,有关异步页面的更全面描述,请参阅http://msdn.microsoft.com/en-us/magazine/cc163725.aspx

页面方法是一个不同名称的Web服务。 ScriptManager将发出必要的JS样板,以创建一个非常容易调用Web服务的XHR,但是ScriptManager的所有内容都与它们有关。

正如MSDN页面所述,如果请求处于“部分呈现模式”,则ScriptManager.IsInAsyncPostBack将为true,因此当您执行页面方法时,ScriptManager.IsInAsyncPostBack将为false,因为该请求尚未作为结果生成部分回发(即UpdatePanel刷新其内容)。

现在听起来你正在执行服务器端事件处理程序,这是从JS调用页面方法的明显结果。 AFAIAA,使用javascript 调用页面方法不应该导致页面通过其正常的页面生命周期 - 因此页面加载,init等等,并且这些事件不应该执行。所以这很奇怪。

建议: -

请参阅Anz的评论和Dave在这里的回复encosia

难道你和Anz有类似的问题吗?即调用页面方法,然后您的页面立即回复?

答案 1 :(得分:0)

这是因为ASP.NET Ajax和ASP.NET回调是两个不同的东西,并以不同的方式实现。不幸的是,你必须同时使用Page.IsAsync和ScriptManager.IsInAsyncPostBack。

答案 2 :(得分:0)

Page.IsASync可能会返回页面指令

中页面是否设置为Async
<%@ Page Language="vb" Async="true" ...

autopostback标志是在每次单个控制操作后都没有回发的,因此用户可以填写整个表单,然后只创建回发并触发所有相关代码。

这并不奇怪,他们这样设计,以便服务器端代码始终与客户端同步。因此,如果您在页面上进行下拉列表选择并发生回发,那么下拉列表更改将执行它自己的代码以及触发回发的控件。您可能希望了解有关ASP .Net页面生命周期的更多信息。它让事情变得更加清晰。