致力于技术进步

专注于编程艺术

博客园 首页 新随笔 联系 订阅 管理

参考资料

http://msdn.microsoft.com/zh-cn/library/bb311028.aspx

http://msdn.microsoft.com/zh-cn/library/bb397523.aspx

当采用ASP.NET AJAX扩展时,如果采用WebService或者WCF,可以比较方便的设置回调客户端事件,但是在使用UpdatePanel的时候,异步回调完成后如何调用客户端脚本呢?

 

传统的AJAX最关键的一个地方就是在异步请求完成后,会引发一个完成事件,但是使用ASP.NET AJAX扩展的UpdatePanel后,却没有这样的设置。

 

想了很多办法,均不能实现,但是AJAX扩展具有UpdateProgress这个控件,说明ASP.NET是提供了异步请求从开始到结束的控制的。

 

在网上并不容易找到相关内容,因为UpdatePanel实在是太方便了,并且我们可以直接控制界面元素进行类似提示等效果。

 

但是在复杂的应用中还是会出现需要在异步回调完成后执行特定的客户端脚本的情况。

找了很多资料终于发现,其实ASP.NET是提供了这样的解决方案的。

 

在使用ScriptManager后,ASP.NET创建了一个客户端类,这个类用于处理异步回调的方法、事件、属性。

 官方定义:

  Sys.WebForms.PageRequestManager 类

  管理服务器 UpdatePanel 控件在浏览器中的部分页更新,并通过使用客户端脚本定义属性、事件和方法以自定义 Web 页。

  命名空间:Sys.WebForms

  继承:

  示例:var prm = Sys.WebForms.PageRequestManager.getInstance();
 
这个类是客户端类,所以是写在客户端脚本里的。
该类提供了很多方法。其中

Sys.WebForms.PageRequestManager pageLoaded 事件 就可以完成异步回调完成后调用客户端方法的功能。

 

示例:

    <form id="form1" runat="server">

<asp:ScriptManager runat="server"></asp:ScriptManager>
    <div>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
        </ContentTemplate>
        </asp:UpdatePanel>

    </div>
    <script>

        Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(pageLoaded);

        function pageLoaded() {

            alert("Test");

        }

    </script>
    </form>

posted on 2011-05-16 09:15  stephen&amp;#183;周  阅读(254)  评论(0)    收藏  举报