1 概述
1.1 使部分頁面輸出可用
2 添加 ScriptManager 控件
4 添加 Web 服務(wù)客戶端代理
ScriptManager 控件管理用于 Microsoft ASP.NET AJAX 頁面的客戶端腳本。默認(rèn)情況下,ScriptManager 控件將 Microsoft AJAX 庫的腳本與頁面注冊到一起,這使腳本可以使用類型系統(tǒng)擴(kuò)展并支持局部頁面輸出和 Web 服務(wù)調(diào)用。
在頁面中,必須使用 ScriptManager 控件來使下列 Microsoft ASP.NET AJAX 的特性可用:
在頁面中,必須使用 ScriptManager 控件來使下列 Microsoft ASP.NET AJAX 的特性可用:
- Microsoft AJAX 庫的客戶端腳本功能,以及任何要發(fā)送到瀏覽器的定制腳本。
- 部分頁面輸出,這使頁面中的某個(gè)區(qū)域可以不依賴于回送就可以刷新。ASP.NET AJAX? 的 UpdatePanel 、UpdateProgress 和 Timer 控件需要 ScriptManager 控件來支持局部輸出。
- Web 服務(wù)的 Javascript 代理,這使客戶端腳本可以訪問由強(qiáng)類型的 Web 服務(wù)暴露出來的方法。
- Javascript 類訪問 ASP.NET 認(rèn)證和個(gè)性化應(yīng)用服務(wù)。
當(dāng)頁面中有一個(gè)或多個(gè) UpdatePanel 控件時(shí),ScriptManager 控件將管理在瀏覽器中的局部頁面輸出。控件與頁面生成周期交互來更新包含在 UpdatePanel 控件中的局部頁面。
ScriptManager 控件的 EnablePartialRendering 屬性決定了頁面是否可以進(jìn)行局部更新。默認(rèn)情況下,EnablePartialRendering 的值為 true,因此,在默認(rèn)情況下添加了一個(gè) ScriptManager 控件到頁面中時(shí),局部輸出是可用的。
1.2 錯(cuò)誤處理
ScriptManager 控件的 EnablePartialRendering 屬性決定了頁面是否可以進(jìn)行局部更新。默認(rèn)情況下,EnablePartialRendering 的值為 true,因此,在默認(rèn)情況下添加了一個(gè) ScriptManager 控件到頁面中時(shí),局部輸出是可用的。
在局部輸出期間,可以使用下列方法來處理錯(cuò)誤:
1.3 使用類型系統(tǒng)擴(kuò)展
- 設(shè)置 AllowCustomErrorsRedirect 屬性,它決定了在異步回發(fā)期間發(fā)生錯(cuò)誤時(shí),如何使用 Web.config 文件的定制的錯(cuò)誤節(jié)。
- 處理 ScriptManager 控件的 AsyncPostBackError 事件,它在異步回發(fā)期間出現(xiàn)頁面錯(cuò)誤時(shí)觸發(fā)。
- 設(shè)置 AsyncPostBackErrorMessage 屬性,這是發(fā)送到瀏覽器的錯(cuò)誤信息。
Microsoft AJAX 庫添加了 Javascript 的類型系統(tǒng)擴(kuò)展,提供了命名空間、繼承、接口、枚舉、反射以及用于字符串和數(shù)組的輔助功能。這些擴(kuò)展提供了在客戶端腳本中的功能使其看起來像是 .NET 框架。它使你可以使用結(jié)構(gòu)化的方式來編寫ASP.NET 2.0 AJAX 擴(kuò)展應(yīng)用程序,以增強(qiáng)可維護(hù)性、使得更易于添加特性和劃分功能層次。將 ScriptManager 控件到 ASP.NET Web 頁面會(huì)自動(dòng)包含類型系統(tǒng)擴(kuò)展,所以可以在客戶端腳本中使用庫。
1.4 注冊定制腳本
使用 ScriptManager 管理那些為參與局部頁面更新的控件而創(chuàng)建的資源,資源包括腳本、樣式、隱藏字段和數(shù)組。ScriptManager 控件的 Scripts 集合包括了每一個(gè)瀏覽器可用的腳本的 ScriptReference 對象。可以用聲明或編程來指定腳本。
ScriptManager 控件還提供了可以用來以編程的方式管理客戶端腳本和隱藏字段的注冊方法。在注冊支持局部頁面更新的腳本和隱藏字段時(shí),必須調(diào)用 ScriptManager 的注冊方法。(要注冊不是局部頁面更新所需要的腳本時(shí),可以使用 ClientScriptManager 類。)
注意:
1.5 注冊 Web 服務(wù)
ScriptManager 控件還提供了可以用來以編程的方式管理客戶端腳本和隱藏字段的注冊方法。在注冊支持局部頁面更新的腳本和隱藏字段時(shí),必須調(diào)用 ScriptManager 的注冊方法。(要注冊不是局部頁面更新所需要的腳本時(shí),可以使用 ClientScriptManager 類。)
注意:
任何在頁面中由 ScriptManager 控件注冊的腳本和所有事件處理腳本都必須包含在頁面中的 <form> 元素中,否則,腳本將不會(huì)被注冊或執(zhí)行。
ScriptManager 控件的 Services 集合中包含了每個(gè)使用 ScriptManager 注冊的 Web 服務(wù)的 ServiceReference 對象。ASP.NET AJAX 框架為 Services 集合中的每個(gè) ServiceReference 對象生成一個(gè)客戶端代理對象。代理類和它的強(qiáng)類型成員簡化了客戶端腳本使用 Web 服務(wù)。
可以在運(yùn)行時(shí)用編程的方式添加 ServiceReference 對象到 Services 集合中,以注冊 Web 服務(wù)。
1.6 在客戶端腳本中使用認(rèn)證和個(gè)性化服務(wù)
可以在運(yùn)行時(shí)用編程的方式添加 ServiceReference 對象到 Services 集合中,以注冊 Web 服務(wù)。
Microsoft AJAX 庫包含了直接從 Javascript 中調(diào)用 ASP.NET 2.0 窗體認(rèn)證和個(gè)性化應(yīng)用服務(wù)的代理類。如果要使用定制的認(rèn)證服務(wù),可以使用 ScriptManager 控件來注冊。
1.7 ScriptManagerProxy 類
在一個(gè)頁面中只能添加一個(gè) ScriptManager 控件。頁面可以直接包含控件,或者包含在嵌套的組件中,如用戶控件、母版頁中的內(nèi)容頁或者嵌套的母版頁。當(dāng)頁面中已經(jīng)有一個(gè) ScriptManager 控件,而嵌套的或父組件需要 ScriptManager 控件的其他特性時(shí),組件就可以包含一個(gè) ScriptManagerProxy 控件。例如,ScriptManagerProxy 控件可以使你添加僅用于嵌套組件的腳本和服務(wù)到相應(yīng)組件中。
2 添加 ScriptManager 控件
直接將 ScriptManager 控件從工具箱中拖到頁面的 <form> 元素中即可得到如下的元素引用,這樣,在它所有的頁面就可以使用 ASP.NET AJAx 了。
3 客戶端腳本管理示例
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
3.1 和 3.2 分別展示了將單個(gè)程序集中嵌入的腳本或者獨(dú)立的腳本文件添加到頁面中的方法,如果要同時(shí)添加多個(gè)腳本,任意按這二個(gè)方法在 <Scripts> 元素中添加多個(gè) <asp:ScriptReference>元素即可。
3.1 添加程序集中內(nèi)嵌的腳本
如下代碼展示了向頁面中添加嵌入到 Microsot.Web.Preview 程序集中的 PreviesScript.js 腳本文件。
3.2 添加單獨(dú)的腳本文件
<asp:ScriptManager ID="ScriptManager1" runat="server">
??? <Scripts>
??? ??? <asp:ScriptReference Assembly="Microsot.Web.Preview" Name="PreviesScript.js" />
??? </Scripts>
</asp:ScriptManager>
??? <Scripts>
??? ??? <asp:ScriptReference Assembly="Microsot.Web.Preview" Name="PreviesScript.js" />
??? </Scripts>
</asp:ScriptManager>
下列代碼展示了向頁面中添加單獨(dú)的腳本文件 ~/ScriptPath/ScriptFile.js ,可以將它替換成自己所需要的腳本文件使用。
3.3 ScriptManager 的相關(guān)屬性
<asp:ScriptManager ID="ScriptManager1" runat="server">
??? <Scripts>
??? ??? <asp:ScriptReference Path="~/ScriptPath/ScriptFile.js" />
??? </Scripts>
</asp:ScriptManager>
??? <Scripts>
??? ??? <asp:ScriptReference Path="~/ScriptPath/ScriptFile.js" />
??? </Scripts>
</asp:ScriptManager>
ScriptMode:
ScriptManager 和 ScriptReference 對象都具有 ScriptMode 屬性,它決定向客戶端所發(fā)送的腳本的版本是 Debug 的還是 Release 的。它有四個(gè)可選的值:Inherit、Auto、Debug 和 Release。Debug 和 Release 的意義非常明確,就不再解釋。Inherit 表示繼承外層的設(shè)置,對于ScriptManager 來說,相當(dāng)于 Auto。Auto 表示根據(jù)當(dāng)前的編譯模式及 Web.config 中的相關(guān)設(shè)置來自動(dòng)決定腳本的版本。
ScriptPath :
用于指定頁面中所有腳本塊的相對的、絕對的或應(yīng)用程序相關(guān)的 URL,這包括由當(dāng)前 ScriptManager 實(shí)例注冊的定制的或第三方腳本塊。如果 Scripts 集合中的 ScriptReference 設(shè)置了 Path屬性,Path 屬性將覆蓋 ScriptPath 的設(shè)置。如果沒有設(shè)置此屬性且ScriptReference 指定的是程序集的話,每次請求腳本時(shí)都將用 WebResource.axd 從程序集中解析出腳本后再發(fā)回瀏覽器,而設(shè)置后將直接使用 ScriptPath 下的 js 文件。
LoadScriptsBeforeUI:
當(dāng)此屬性為 ture 時(shí),為引入的腳本生成的 <script>元素將出現(xiàn)在所有頁面的 UI 標(biāo)記之前,否則生成在所有 UI 標(biāo)記之后。如果在加載的過程執(zhí)行需要使用了引入的腳本的腳本的話,就必須設(shè)置其為 true ,否則將無法執(zhí)行。
4 添加 Web 服務(wù)客戶端代理
添加 Web 服務(wù)的客戶端代理與添加腳本類似,如下列代碼所示:
5 處理異步回發(fā)中出現(xiàn)的異常
?<asp:ScriptManager ID="ScriptManager1" runat="server">
??? <Services>
??? ??? <asp:ServiceReference Path="MyServices.asmx" />
??? </Services>
</asp:ScriptManager>
另外,在 Web.config 中還需要加入下列配置項(xiàng):
??? <Services>
??? ??? <asp:ServiceReference Path="MyServices.asmx" />
??? </Services>
</asp:ScriptManager>
<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>
這樣,在客戶端腳本中就可以直接調(diào)用 Web 服務(wù)的靜態(tài)方法了。
? <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>
在此僅介紹最簡單的方式。
通常,在出現(xiàn)異常時(shí),.NET 框架會(huì)重定向到一個(gè)黃色的異常頁面上,但對于用異步回發(fā)的方式處理的頁面來說,這會(huì)是一場災(zāi)難,無法恢復(fù)到原頁面的當(dāng)前狀態(tài)。
可以設(shè)置 ScriptManager 控件的 AllowCustomErrorsRedirect = "false" 來阻止出現(xiàn)異常時(shí)的重定向,設(shè)置 AsyncPostBackErrorMessage 屬性為出現(xiàn)異常時(shí)顯示給用戶的出錯(cuò)信息。這樣,當(dāng)操作出現(xiàn)異常時(shí),ScriptManager 將自動(dòng)彈出包含 AsyncPostBackErrorMessage 中設(shè)置的信息的瀏覽器消息框。
通常,在出現(xiàn)異常時(shí),.NET 框架會(huì)重定向到一個(gè)黃色的異常頁面上,但對于用異步回發(fā)的方式處理的頁面來說,這會(huì)是一場災(zāi)難,無法恢復(fù)到原頁面的當(dāng)前狀態(tài)。
可以設(shè)置 ScriptManager 控件的 AllowCustomErrorsRedirect = "false" 來阻止出現(xiàn)異常時(shí)的重定向,設(shè)置 AsyncPostBackErrorMessage 屬性為出現(xiàn)異常時(shí)顯示給用戶的出錯(cuò)信息。這樣,當(dāng)操作出現(xiàn)異常時(shí),ScriptManager 將自動(dòng)彈出包含 AsyncPostBackErrorMessage 中設(shè)置的信息的瀏覽器消息框。
?
?
TrackBack:http://www.cnblogs.com/cxy521/archive/2008/01/22/1048257.html
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
