當頁面中已經有一個 ScriptManager 控件,而嵌套的或父組件需要 ScriptManager 控件的其他特性時,組件就可以包含一個 ScriptManagerProxy 控件。例如,ScriptManagerProxy 控件可以使你添加僅用於嵌套組件的腳本和服務到相應組件中。
2 添加 ScriptManager 控件
直接將 ScriptManager 控件從工具箱中拖到頁面的 <form> 元素中即可得到如下的元素引用,這樣,在它所有的頁面就可以使用 ASP.Net AJax 了。
<asp:ScriptManager ID="ScriptManager1" runat="server"></ASP:ScriptManager>
3 客戶端腳本管理示例
3.1 和 3.2 分別展示了將單個程序集中嵌入的腳本或者獨立的腳本文件添加到頁面中的方法,如果要同時添加多個腳本,任意按這二個方法在 <Scripts> 元素中添加多個 <ASP:ScriptReference>元素即可。
3.1 添加程序集中內嵌的腳本
如下代碼展示了向頁面中添加嵌入到 Microsot.Web.Preview 程序集中的 PrevIEsScript.JS 腳本文件。
<ASP:ScriptManager ID="ScriptManager1" runat="server">
<Scripts>
<ASP:ScriptReference Assembly="Microsot.Web.Preview" Name="PrevIEsScript.JS" />
</Scripts>
</ASP:ScriptManager>
3.2 添加單獨的腳本文件
下列代碼展示了向頁面中添加單獨的腳本文件 ~/ScriptPath/ScriptFile.JS ,可以將它替換成自己所需要的腳本文件使用。
<ASP:ScriptManager ID="ScriptManager1" runat="server">
<Scripts>
<ASP:ScriptReference Path="~/ScriptPath/ScriptFile.JS" />
</Scripts>
</ASP:ScriptManager>
3.3 ScriptManager 的相關屬性
ScriptMode:
ScriptManager 和 ScriptReference 對象都具有 ScriptMode 屬性,它決定向客戶端所發送的腳本的版本是 Debug 的還是 Release 的。它有四個可選的值:Inherit、Auto、Debug 和 Release。Debug 和 Release 的意義非常明確,就不再解釋。Inherit 表示繼承外層的設置,對於ScriptManager 來說,相當於 Auto。Auto 表示根據當前的編譯模式及 Web.config 中的相關設置來自動決定腳本的版本。
ScriptPath :
用於指定頁面中所有腳本塊的相對的、絕對的或應用程序相關的 URL,這包括由當前 ScriptManager 實例注冊的定制的或第三方腳本塊。如果 Scripts 集合中的 ScriptReference 設置了 Path屬性,Path 屬性將覆蓋 ScriptPath 的設置。如果沒有設置此屬性且ScriptReference 指定的是程序集的話,每次請求腳本時都將用 WebResource.axd 從程序集中解析出腳本後再發回浏覽器,而設置後將直接使用 ScriptPath 下的 JS 文件。
LoadScriptsBeforeUI:
當此屬性為 ture 時,為引入的腳本生成的 <script>元素將出現在所有頁面的 UI 標記之前,否則生成在所有 UI 標記之後。如果在加載的過程執行需要使用了引入的腳本的腳本的話,就必須設置其為 true ,否則將無法執行。
4 添加 Web 服務客戶端代理
添加 Web 服務的客戶端代理與添加腳本類似,如下列代碼所示:
<ASP:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<ASP:ServiceReference Path="MyServices.asmx" />
</Services>
</ASP:ScriptManager>
另外,在 Web.config 中還需要加入下列配置項:
<system.web>
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</httpHandlers>
</system.web>
這樣,在客戶端腳本中就可以直接調用 Web 服務的靜態方法了。
5 處理異步回發中出現的異常
在此僅介紹最簡單的方式。
通常,在出現異常時,.Net 框架會重定向到一個黃.色的異常頁面上,但對於用異步回發的方式處理的頁面來說,這會是一場災難,無法恢復到原頁面的當前狀態。
可以設置 ScriptManager 控件的 AllowCustomErrorsRedirect = "false" 來阻止出現異常時的重定向,設置 AsyncPostBackErrorMessage 屬性為出現異常時顯示給用戶的出錯信息。這樣,當操作出現異常時,ScriptManager 將自動彈出包含 AsyncPostBackErrorMessage 中設置的信息的浏覽器消息框。