程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 初學 ASP.NET AJAX (二):小試 ScriptManager

初學 ASP.NET AJAX (二):小試 ScriptManager

編輯:.NET實例教程
1 概述

ScriptManager 控件管理用於 Microsoft ASP.Net AJAX 頁面的客戶端腳本。默認情況下,ScriptManager 控件將 Microsoft AJax 庫的腳本與頁面注冊到一起,這使腳本可以使用類型系統擴展並支持局部頁面輸出和 Web 服務調用。
在頁面中,必須使用 ScriptManager 控件來使下列 Microsoft ASP.Net AJax 的特性可用:

  • Microsoft AJax 庫的客戶端腳本功能,以及任何要發送到浏覽器的定制腳本。
  • 部分頁面輸出,這使頁面中的某個區域可以不依賴於回送就可以刷新。ASP.Net AJax  的 UpdatePanel 、UpdateProgress 和 Timer 控件需要 ScriptManager 控件來支持局部輸出。
  • Web 服務的 Javascript 代理,這使客戶端腳本可以訪問由強類型的 Web 服務暴露出來的方法。
  • Javascript 類訪問 ASP.Net 認證和個性化應用服務。
1.1 使部分頁面輸出可用

當頁面中有一個或多個 UpdatePanel 控件時,ScriptManager 控件將管理在浏覽器中的局部頁面輸出。控件與頁面生成周期交互來更新包含在 UpdatePanel 控件中的局部頁面。
ScriptManager 控件的 EnablePartialRendering 屬性決定了頁面是否可以進行局部更新。默認情況下,EnablePartialRendering 的值為 true,因此,在默認情況下添加了一個 ScriptManager 控件到頁面中時,局部輸出是可用的。
1.2 錯誤處理

在局部輸出期間,可以使用下列方法來處理錯誤:
  • 設置 AllowCustomErrorsRedirect 屬性,它決定了在異步回發期間發生錯誤時,如何使用 Web.config 文件的定制的錯誤節。
  • 處理 ScriptManager 控件的 AsyncPostBackError 事件,它在異步回發期間出現頁面錯誤時觸發。
  • 設置 AsyncPostBackErrorMessage 屬性,這是發送到浏覽器的錯誤信息。
1.3 使用類型系統擴展

Microsoft AJax 庫添加了 Javascript 的類型系統擴展,提供了命名空間、繼承、接口、枚舉、反射以及用於字符串和數組的輔助功能。這些擴展提供了在客戶端腳本中的功能使其看起來像是 .NET 框架。它使你可以使用結構化的方式來編寫ASP.NET 2.0 AJax 擴展應用程序,以增強可維護性、使得更易於添加特性和劃分功能層次。將 ScriptManager 控件到 ASP.Net Web 頁面會自動包含類型系統擴展,所以可以在客戶端腳本中使用庫。
1.4 注冊定制腳本

使用 ScriptManager 管理那些為參與局部頁面更新的控件而創建的資源,資源包括腳本、樣式、隱藏字段和數組。ScriptManager 控件的 Scripts 集合包括了每一個浏覽器可用的腳本的 ScriptReference 對象。可以用聲明或編程來指定腳本。
ScriptManager 控件還提供了可以用來以編程的方式管理客戶端腳本和隱藏字段的注冊方法。在注冊支持局部頁面更新的腳本和隱藏字段時,必須調用 ScriptManager 的注冊方法。(要注冊不是局部頁面更新所需要的腳本時,可以使用 ClIEntScriptManager 類。)
注意:

任何在頁面中由 ScriptManager 控件注冊的腳本和所有事件處理腳本都必須包含在頁面中的 <form> 元素中,否則,腳本將不會被注冊或執行。
1.5 注冊 Web 服務

ScriptManager 控件的 Services 集合中包含了每個使用 ScriptManager 注冊的 Web 服務的 ServiceReference 對象。ASP.Net AJax 框架為 Services 集合中的每個 ServiceReference 對象生成一個客戶端代理對象。代理類和它的強類型成員簡化了客戶端腳本使用 Web 服務。
可以在運行時用編程的方式添加 ServiceReference 對象到 Services 集合中,以注冊 Web 服務。
1.6 在客戶端腳本中使用認證和個性化服務

Microsoft AJax 庫包含了直接從 Javascript 中調用 ASP.Net 2.0 窗體認證和個性化應用服務的代理類。如果要使用定制的認證服務,可以使用 ScriptManager 控件來注冊。
1.7 ScriptManagerProxy 類

在一個頁面中只能添加一個 ScriptManager 控件。頁面可以直接包含控件,或者包含在嵌套的組件中,如用戶控件、母版頁中的內容頁或者嵌套的母版頁。

當頁面中已經有一個 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 中設置的信息的浏覽器消息框。 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved