ScriptManager控件包括在ASP.NET 2.0 AJAX Extensions中,它用來處理頁面上的所有組件以及頁面局部更新,生成相關的客戶端代理腳本以便能夠在JavaScript中訪問Web Service,所有需要支持ASP.NET AJAX的ASP.NET頁面上有且只能有一個ScriptManager控件。在ScriptManager控件中我們可以指定需要的腳本庫,或者指定通過JS來調用的Web Service,以及調用AuthenticationService和ProfileService,還有頁面錯誤處理等。
主要內容
1.控件概述
2.一個簡單的示例
3.客戶端腳本模式
4.錯誤處理
5.Services屬性
6.Scripts屬性
一.控件概述
ScriptManager控件包括在ASP.NET 2.0 AJAX Extensions中,它用來處理頁面上的所有組件以及頁面局部更新,生成相關的客戶端代理腳本以便能夠在JavaScript中訪問Web Service,所有需要支持ASP.NET AJAX的ASP.NET頁面上有且只能有一個ScriptManager控件。在ScriptManager控件中我們可以指定需要的腳本庫,或者指定通過JS來調用的Web Service,還可以指定頁面錯誤處理等。
使用<asp:ScriptManager/>來定義一個ScriptManager,簡單的ScriptManager定義形式:
屬性/方法
描述
AllowCustomError
和Web.config中的自定義錯誤配置區<customErrors>相聯系,是否使用它,默認值為true
AsyncPostBackErrorMessage
異步回傳發生錯誤時的自定義提示錯誤信息,
AsyncPostBackTimeout
異步回傳時超時限制,默認值為90,單位為秒
EnablePartialRendering
是否支持頁面的局部更新,默認值為True,一般不需要修改
ScriptMode
指定ScriptManager發送到客戶端的腳本的模式,有四種模式:Auto,Inherit,Debug,Release,默認值為Auto,后面會仔細說到。
ScriptPath
設置所有的腳本塊的根目錄,作為全局屬性,包括自定義的腳本塊或者引用第三方的腳本塊。如果在Scripts中的<asp:ScriptReference/>標簽中設置了Path屬性,它將覆蓋該屬性。
OnAsyncPostBackError
異步回傳發生異常時的服務端處理函數,在這里可以捕獲一場信息并作相應的處理。
OnResolveScriptReference
指定ResolveScriptReference事件的服務器端處理函數,在該函數中可以修改某一條腳本的相關信息如路徑、版本等。
二.一個簡單的示例
這個例子其實是UpdatePanel示例,在頁面中加入了日期控件和一個下拉框,根據下拉框選擇的不同,日期控件背景變為不同的顏色。示例代碼如下:
三.客戶端腳本模式
在前面我們提到了ScriptMode屬性指定ScriptManager發送到客戶端的腳本的模式,它有四種模式:Auto,Inherit,Debug,Release,默認值為Auto。
1.Auto:它會根據Web站點的Web.config配置文件來決定使用哪一種模式,只有當配置文件中retail屬性設置為false:
或者頁面中的Debug指令設為true的時候會使用Debug版本,其他的情況都會使用Release版本。
2.Inherit:應該是通過程序設置ScriptMode的時候,等同于Auto?(不太了解)
3.Debug:客戶端腳本使用Debug版本,除非retail屬性設為true。
4.Release:客戶端腳本使用Release版本,除非retail屬性設為false。
四.錯誤處理
在頁面回傳時如果發生了異常AsyncPostBackError事件將被觸發,錯誤信息的處理依賴于AllowCustomErrors屬性、AsyncPostBackErrorMessage屬性和Web.config中的<customErrors>配置區。下面看一個簡單的錯誤處理例子,在AsyncPostBackError事件中捕獲到異常信息并設置AsyncPostBackErrorMessage屬性。
運行后時界面:
發生異常信息:
五.Services屬性
Services用來管理對WebService的調用,通過<asp:ServiceReference>標簽可以在Services中注冊一個WebService,在運行時ScriptManager將為每一個ServiceReference對象生成一個客戶端代理,<asp:ServiceReference>標簽一個很重要的屬性是Path,用來指定WebService的路徑,如下所示:
看一個簡單的調用WebService的例子:
WebService如下,注意在WebServiceSample上加ScriptService特性:
ASPX頁面:
運行后效果如下:
當然了也可以在運行時動態的在Services中加入ServiceReference,下面看一個運行時動態加入ServiceReference的例子:
可以看到運行后和在ScriptManager中直接加入的效果是一樣的。
六.Scripts屬性
關于Scripts屬性到后面具體再說吧,最主要的屬性有Path指定腳本的路徑,ScriptMode指定客戶端腳本的模式,它會覆蓋ScriptManager中的ScriptMode屬性,還有一個屬性是IgnoreScriptPath,指定是否忽略掉ScriptManager中的ScriptPath屬性。