ASP.NET AJAX - 內容頁面一定要使用 ScriptManagerProxy 控制項嗎?

摘要:ASP.NET AJAX - 內容頁面一定要使用 ScriptManagerProxy 控制項嗎?

作者:章立民研究室

日期:2006/11/17

目的:說明主版頁面與內容頁面的非同步局部更新機制

版本:ASP.NET AJAX 1.0 Beta 2

出處:本文節錄自章立民研究室正在撰寫的ASP.NET AJAX大解密」一書 

 

 

 

 

 

我發現不少朋友存在一個錯誤的觀念,那就是誤以為內容頁面(Content Pages)上一定要使用 ScriptManagerProxy 控制項。這當然是錯誤的,正確的說法應該是,內容頁面可以視需要來決定是否加入 ScriptManagerProxy 控制項。事實上在大多數的情況下,內容頁面不需要加入 ScriptManagerProxy 控制項就可以完成非同步局部更新作業。 

主版頁面(Master Pages)與內容頁面(Content Pages)在實作非同步局部更新時,應考量下列要點: 

q  如果您將 ScriptManager 控制項加至主版頁面上,則內容頁面就不需要再加入 ScriptManager 控制項。但是如果內容頁面需要新增或移除由 ScriptManager 控制項所定義的指令碼(Script)或 Web 服務,則可以在內容頁面上加入一個 ScriptManagerProxy 控制項來完成相關處理

到底什麼情況下,才需要在內容頁面中加入一個 ScriptManagerProxy 控制項呢?基本上,如果您的Web應用程式中只有少數幾個內容頁面需要使用特定的Web服務或 .js 檔,則應該在這些內容頁面上使用 ScriptManagerProxy 控制項來註冊所需的Web服務或 .js檔。之所以要如此作,是因為如果您在主版頁面之 ScriptManager   標記項目中去註冊 Web 服務或 .js 檔,將使得衍生自該主版頁面的所有內容頁面都會去下載它們,這顯然會浪費資源,是非常不智的作法。不過反過來說,如果衍生自某一個主版頁面的每一個內容頁面都需要使用到特定的Web服務或 .js 檔,則當然是在主版頁面之 ScriptManager   標記項目中去註冊它們才是最直接的作法。所以該如何作,端視您的使用需求而定。

q  如果您沒有在主版頁面上加入一個 ScriptManager 控制項,則您必須在每一個會使用到 UpdatePanel 控制項的內容頁面上加入 ScriptManager 控制項。 

網頁範例 

圖表 1 所示者是網頁範例 CH3_DemoForm025.aspx 的設計畫面,此網頁是一個套用了主版頁面 FourthMasterPage.master 的內容頁面,其主要目的是示範如何使用 ScriptManagerProxy 控制項來呼叫 Web 服務。 

基本上,網頁範例 CH3_DemoForm025.aspx 是使用 ScriptManagerProxy 控制項來呼叫 SimpleWebService.asmx 此一 Web 服務的 EchoInput 方法,以便回應使用者的輸入並傳回目前伺服器的時間。如果使用者沒有輸入任何資料就按下「回應」按鈕,將會顯示訊息「輸入字串是NULL或空白」(如圖表 2 所示);如果使用者確實輸入特定資料並按下「回應」按鈕,將會顯示使用者所輸入的資料以及伺服器目前的時間(如圖表3所示)。 

當然,本網頁範例最重要的,就是必須在內容頁面 CH3_DemoForm025.aspx 中使用 ScriptManagerProxy 控制項來指定所要使用之 Web 服務。寫法如下所示: 

 


圖表
1
 

 


圖表
2
 

 


圖表
3