首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

3.2 在页面中添加ScriptManager控件

任何一个想要使用ASP.NET AJAX的ASP.NET 2.0页面都需要包含一个(且只有一个)ScriptManager控件的声明。按照默认情况,ScriptManager会自动将MicrosoftAjax.js文件和MicrosoftAjaxWebForms.js文件发送至客户端。若页面中还需要更加完善的由其他ASP.NET AJAX客户端脚本提供的功能,或者一些自定义的脚本文件,则需要手工在ScriptManager中添加对这些文件的引用(详见下一节)。

要在页面中添加一个ScriptManager控件,既可以从Visual Studio的Toolbox中将ScriptManager拖入到页面的设计器中,也可以切换到页面的源文件视图,手动添加下述代码:

<asp:ScriptManager ID="ScriptManager1" runat="server" />

注意,很多ASP.NET AJAX服务器端控件均要求在源代码中定义的ScriptManager控件位于它们的前面,所以最保险的方法是在<form id="form1" runat="server">之后立刻声明ScriptManager。

在IE 6.0中浏览包含ScriptManager的页面,并查看源文件,如图3-1所示,可以看到源代码中选中部分包含了3个<script>标签,其src属性分别指向了WebResource.axd资源,并提供不同的参数(参数根据实际情况将略有不同)。这样服务器端的WebResource.axd文件将根据查询字符串从System.Web.Extensions.dll中取得内嵌的脚本资源,并生成内容与MicrosoftAjax.js文件和MicrosoftAjaxWebForms.js文件一致的ASP.NET AJAX的客户端核心脚本,即前两个<script>标签所引用的内容,并将其发送给客户端。至于第三个<script>标签所引用的内容,则提供了对异步回送以及页面局部更新功能的支持(关于ASP.NET AJAX提供的异步回送以及页面局部更新功能,将在本章稍后介绍)。

图3-1  ScriptManager为IE 6.0浏览器生成的脚本引用

熟悉ASP.NET AJAX CTP版本的朋友可能还对AtlasCompat.js和AtlasCompat2.js这两个JavaScript难以忘怀。在CTP版本中,ASP.NET AJAX采用这两个单独的文件来处理浏览器之间的差别问题,这就势必需要服务器端的参与——首先判断客户端浏览器类型,然后发送适当的附加处理脚本。而在ASP.NET AJAX正式版中,这两个文件被分散在其客户端脚本库的各个位置。若在Firefox中浏览同样的页面,并查看源文件,可以发现页面中同样引用了3个WebResource.axd文件,如图3-2中选中部分所示。打开嗅探器捕获HTTP传输的内容,可以看到其中的内容也与IE中的完全一致。这种简化了的实现方式无需服务器端参与,所有的工作都放在客户端进行,也就方便了在其他没有ScriptManager支持的平台上使用ASP.NET AJAX的客户端框架。

图3-2  ScriptManager为Firefox浏览器生成的脚本引用

3.2.1 EnablePartialRendering属性

ScriptManager还提供了一个非常重要的布尔值属性EnablePartialRendering(默认值为true):ASP.NET AJAX允许我们改变原有的ASP.NET回送(postback)模式,即不再是整页的回送,而是只回送页面中的一部分。待服务器端返回之后,也仅仅更新局部的页面。这是一个非常强大的功能,让我们无需更改现有的ASP.NET模型,即可让页面的某些控件(使用ScriptManager的RegisterAsyncPostbackControl()方法,将在稍后介绍)或某个区域(使用UpdatePanel控件,将在下一章介绍)实现Ajax类型的异步回送和局部更新功能。若需要启用页面的局部更新模式,则应该将EnablePartialRendering属性设置为true,这样ASP.NET AJAX会在页面中添加一些额外的JavaScript脚本来截获实现ASP.NET回送的__doPostBack()函数,并接下来使用XMLHttpRequest对象替代传统的整页回送,向服务器发出异步请求。

将EnablePartialRendering属性设置为true之后,ScriptManager控件将引入一些额外的JavaScript脚本,用来支持异步回送和页面局部更新功能,图3-1和图3-2中的向两个<script>标签所引用的内容即为这部分代码。

若在我们的页面中不需要异步回送或页面局部更新功能,则应该手工设置EnablePartial- Rendering属性为false,避免对网络流量不必要的浪费。禁用ScriptManager控件Enable- PartialRendering属性的代码如下:

<asp:ScriptManager ID="ScriptManager1" EnablePartialRendering="false" runat="server" />

这时若再查看浏览器中的源代码,将只能看到一个引入MicrosoftAjax.js脚本文件的<script>标签。

3.2.2 EnablePageMethods属性

ASP.NET AJAX允许我们在客户端JavaScript代码中以一种非常简单、直观的形式直接调用服务器端的某个静态Web Method。在调用之前,记住要将ScriptManager的EnablePageMethods属性设置为true:

<asp:ScriptManager ID="sm" EnablePageMethods="true" runat="server">

</asp:ScriptManager>

然后定义在服务器端的一个静态方法(注意方法一定要为静态,且必须添加[System.Web. Services.WebMethod]属性):

[System.Web.Services.WebMethod]

public static string SayHello(string name)

{

    return string.Format("hello, {0}!", name);

}

随后即可在客户端JavaScript中用下面这行语句直接调用该方法(注意该方法定义在PageMethods中):

PageMethods.SayHello("Dflying", cb_sayHello);

其中cb_sayHello表示该异步调用完成后将要触发的回调函数。

可以看到,ASP.NET AJAX自动生成了服务器端静态方法的客户端代理,我们唯一要做的仅仅是设置ScriptManager的EnablePageMethods属性设置为true。由于该功能与客户端关系及其紧密,所以有关的详细讨论以及使用方法,将在第Ⅱ卷中介绍。

3.2.3 EnableScriptGlobalization和EnableScriptLocalization属性

除此之外,ScriptManager还提供了EnableScriptGlobalization和EnableScript- Localization两个布尔值属性,用来设定程序对全球化以及本地化的支持。对于这部分内容,将在第Ⅱ卷中详细介绍。

由于ScriptManager是服务器端控件,所以其各种属性、事件等均可以在Visual Studio中进行可视化编辑配置,之后IDE将自动生成所需的代码。在页面的设计器中选择ScriptManager控件,然后即可在Properties窗口中编辑其属性(见图3-3)。

图3-3  在Visual Studio中编辑ScriptManager控件的属性

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论