摘要:ASP.NET AJAX - 內容頁面一定要使用 ScriptManagerProxy 控制項嗎?
作者:章立民研究室 日期: 目的:說明主版頁面與內容頁面的非同步局部更新機制 版本:ASP.NET 出處:本文節錄自章立民研究室正在撰寫的「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 的
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