文章教程

10.2ASP.NETAJAX服务器控件

8/31/2020 9:37:14 PM 人评论 次浏览

10.2 ASP.NET AJAX服务器控件

ASP.NET提供了支持AJAX的服务器控件,这些控件由服务器和客户端代码组成,把这些代码集成在一起可生成丰富的客户端行为。当用户使用这些控件将AJAX功能添加到ASP.NET网页时,该页会自动将支持的客户端脚本发送到浏览器以获取AJAX功能。

在VS 2010中,在工具箱中的“AJAX Extensions”组已经集成了AJAX组件,无须安装即可使用,以下是最常使用的AJAX服务器控件,如图10-2所示。

alt

图10-2 AJAX Extensions

各控件功能如下。

ScriptManager控件:主要是管理AJAX的ASP.NET页的客户端脚本。默认情况下,ScriptManager控件会向页面注册Microsoft AJAX Library的脚本,使客户端脚本能够使用Microsoft AJAX类型系统扩展并支持局部页面呈现和Web服务调用之类的功能。

ScriptManagerProxy控件:允许内容页和用户控件等在已定义了ScriptManager控件的情况下,将脚本和服务引用添加到网页。

Timer控件:在定义的时间间隔执行回发。如果将Timer控件用于UpdatePanel控件,则可以按定义的时间间隔启用部分页更新。

UpdatePanel控件:能够执行部分页更新,而不需要自定义客户端脚本。

UpdateProgress控件:能够在UpdatePanel控件中提供有关部分页更新的状态信息。

10.2.1 声明ScriptManager控件

ScriptManager控件是ASP.NET中AJAX功能的中心,ScriptManager控件管理一个页面上的所有ASP.NET AJAX资源,其中,包括将Microsoft AJAX Library脚本下载到浏览器和通过使用UpdatePanel控件启用的部分页面更新。

声明ScriptManager控件的语法如下。

alt

上面就声明了一个简单的ScriptManager控件。通常,使用<asp:ScriptManager/>或<asp:ScriptManager>和</asp:ScriptManager>来声明。

注意

一个页面只能包含一个ScriptManager控件。若在父页面已具有ScriptManager控件时,为嵌套页面、用户控件或组件注册服务和脚本,需使用ScriptManagerProxy控件。

10.2.2 使用ScriptManager注册脚本

使用ScriptManager控件可参与管理部分页更新的控件创建的资源,这些资源包括脚本、样式、隐藏字段和数组。ScriptManager控件的Scripts集合针对浏览器中可用的每个脚本包含一个ScriptReference对象,可以以声明或编程方式指定脚本。

所有ASP.NET网页都可以通过在Script块中引用脚本文件对其进行访问,比如,

alt

但是,使用这种方式调用的脚本不能参与部分页呈现。如果要使脚本文件可在支持AJAX的ASP.NET Web应用程序中用于部分页呈现,必须在页面的ScriptManager控件中注册该脚本。若要注册脚本文件,首先创建一个指向相关文件的ScriptReference对象,并使之将该文件添加到Scripts集合中,代码如下。

alt

注意

在网页上使用ScriptManager控件注册的任何脚本及所有事件处理脚本必须位于网页中的form元素内,否则,不会注册或执行脚本。


使用ScriptManager控件的注册方法,有以下几种情况。

(1)若要在代码中生成客户端脚本,需要以字符串形式生成一个脚本块,然后将其传递给RegisterClientScriptBlock方法。

(2)若要添加没有Microsoft AJAX Library依赖项的独立脚本文件,需要使用RegisterClientScriptInclude方法。

(3)若要添加嵌入在程序集中的脚本文件,需要使用RegisterClientScriptInclude方法。

10.2.3 在ScriptManager中注册Web服务

对于ASP.NET AJAX应用程序中所需的各种服务,ScriptManager控件起到全局注册器的作用。如果要注册Web服务,可以通过将Web服务添加到ScriptManager控件的Services集合来注册它。Microsoft AJAX Framework为Services集合中的每个ServiceReference对象生成一个客户端代理对象,这些代理类及其强类型成员将简化从客户端脚本使用Web服务的过程。可通过编程方式将ServiceReference对象添加到Services集合中,以便在运行时注册Web服务。

注册Web服务的方法,通过将asp:ServiceReference元素添加到页面上的asp:ScriptManager实例中的Services元素中,可以在标记的集合中添加服务,代码如下。

alt

除了上述方法外,还可以通过使用ServiceReferenceCollection类的Add方法,以编程方式将ServiceReference对象添加到Services集合中。

10.2.4 使用UpdatePanel控件

通过使用UpdatePanel控件,可以在回发期间刷新网页的选定部分而不是刷新整个网页,这称为执行部分页更新。在使用UpdatePanel控件前,先了解UpdatePanel控件的几个重要属性。

(1)ChildrenAsTriggers:获取或设置一个值,该值指示来自UpdatePanel控件的即时子控件的回发是否更新面板的内容。

(2)ContentTemplate:获取或设置定义UpdatePanel控件内容的模板。

(3)ContentTemplateContainer:获取一个可以以编程方式向其添加子控件的控件对象。

(4)RenderMode:该值指示UpdatePanel控件的内容是否包含在HTML <div>或<span>元素中。

(5)UpdateMode:获取或设置一个值,该值指示何时更新UpdatePanel控件的内容。有两个选项,Always和Conditional。

UpdatePanel控件在网页中需要ScriptManager控件。默认情况下是启用部分页更新的,因为ScriptManager控件的EnablePartialRendering属性的默认值为true。

使用UpdatePanel控件步骤如下。

(1)新建一个空网站,创建一个窗体Default.aspx,并切换到“设计”视图。

(2)选中工具箱的“AJAX Extensions”选项卡中的ScriptManager控件,将其添加到页中,如图10-3所示。

alt

图10-3 添加ScriptManager控件

(3)双击UpdatePanel控件,将其添加到页中,如图10-4所示。

alt

图10-4 添加UpdatePanel控件

(4)把鼠标移到UpdatePanel控件内部,然后在工具箱的“标准”选项卡中添加Button控件到UpdatePanel控件中,并且在UpdatePanel控件内添加文本,如图10-5所示。

alt

图10-5 前台设计

(5)切换到“源”视图,书写如下代码。

alt

在此代码中,使用了ContentTemplate标签来定义UpdatePanel的内容,在<ContentTemplate>与</ContentTemplate>之间,可以放任何ASP.NET元素。

(6)保存该页面,运行效果如图10-6所示。

alt

图10-6 运行效果

当单击“刷新面板”按钮时,面板中的刷新时间会更新,但整个页面不会刷新。默认情况下,UpdatePanel控件的ChildrenAsTriggers属性为true。如果将此属性设置为true,则无论面板内的哪个控件导致回发,面板内的控件都会参与部分页更新。

注意

如果将UpdatePanel控件的UpdateMode属性设置为Always,则每次从页执行回发时都会更新UpdatePanel控件的内容。

10.2.5 使用嵌套的UpdatePanel控件

UpdatePanel控件可以嵌套。如果刷新父面板,也会刷新所有嵌套的面板。

下面通过一个示例来演示父面板和子面板的刷新,父面板中的刷新按钮会同时触发父面板和子面板中的内容更新,但子面板中的按钮更新子面板的内容,不会更新父面板的内容。

(1)新建一个空网站,创建一个窗体Default.aspx,并切换到“设计”视图。

(2)选中工具箱的“AJAX Extensions”选项卡中的ScriptManager控件,将其添加到页中。

(3)在页面中放置两个UpdatePanel控件,并且设置为嵌套,并在两个UpdatePanel中各添加两个Button控件,设计好的布局如图10-7所示。

alt

图10-7 UpdatePanel嵌套布局

设计好后,前台代码如下。

alt

(4)保存该页,并在浏览器中运行,效果如图10-8所示。

alt

图10-8 UpdatePanel嵌套效果

10.2.6 编程控制UpdatePanel控件

除了使用嵌套方式外,还可以以编程方式控制UpdatePanel控件,具体步骤如下。

首先在页面中创建UpdatePanel控件的新实例,然后通过使用ContentTemplate Container属性和ControlCollection.Add方法向新实例添加控件。

下面示例演示如何以编程方式向页中添加UpdatePanel控件。

(1)新建一个空网站,创建一个窗体Default.aspx,并切换到“设计”视图。

(2)选中工具箱的“AJAX Extensions”选项卡中的ScriptManager控件,将其添加到页中,如图10-9所示。

alt

图10-9 前台布局

(3)在后台开始编写代码,以引用UpdatePanel控件,代码如下。

alt

(4)运行示例,效果如图10-10所示。

alt

图10-10 编程控制UpdatePanel控件

从运行的效果来看,在前台的面板中并没有放置UpdatePanel控件,而是在页面初始化的事件中创建UpdatePanel控件的新实例,通过使用ContentTemplateContainer属性向面板添加Label和Button控件。因为ChildrenAsTriggers属性默认为true,所以Button控件用作面板的触发器。

注意

不要直接向ContentTemplate属性添加控件。


当以编程方式添加UpdatePanel控件时,仅来自与UpdatePanel控件处于同一命名容器中的控件的回发可用作面板的触发器。

教程类别