2008年5月4日 星期日

ASP.NET AJAX Extensions 1.0

一改過去專注於 server 端的功能,微軟在 .net 2.0 開始加強與 client 端的整合。為了讓開發人員更有效率的開發 Ajax 程式,ASP.NET AJAX Extensions 1.0 封裝了相關開發套件,讓開發人員像是往常使用 Server Control 般的使用這些新元件。

但這項新功能,並非在你安裝完 VS2005之後就有,需要到 ASP.Net Ajax 網站去下載,
網址為:http://www.asp.net/ajax/downloads/

當下載並安裝完 ASP.NET AJAX Extensions 1.0 ,日後當你執行【加入】-【新網站】時,會多一個 【ASP.NET AJAX-Enabled Web Site】,你的每個 WebForm 新頁面,在設計頁面就會多一個 ScriptManager 控制項。我們可以將這個 ScriptManager視為所有 Ajax 技術會使用到的相關 JavaScript 定義集合。也就是因為這是個定義集合,所以需要將它放置在整個頁面的最前面,如此當後面有叫用 Ajax 方法時,才能夠找到對應的函式。如果您沒注意到這個小地方,那你會得到一個下面的錯誤訊息:

The control with ID 'UpdatePanel1' requires a ScriptManager on the page. The ScriptManager must appear before any controls that need it.

當然,在實際的開發專案裡,可能原先並沒有一開始就採用 【ASP.NET AJAX-Enabled Web Site】,而是一般的 【ASP.Net 網站】。如果想加入 Ajax 功能,則需要留意下面幾點:

1.Copy 3個 Ajax dll 檔並設成參考。Web.Config 會增加三個 assembly。這3個檔案是安裝 ASP.NET AJAX Extensions 1.0 時,自動產生在您的電腦上,可以透過Windows的【程式集】找到他們。

AJAXExtensionsToolbox.dll
System.Web.Extensions.Design.dll
System.Web.Extensions.dll

2.Web.Config 修改:[放大檢視] ← Copy 專用,避免複製到網頁的控制碼

在 <System.web></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"/>
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
validate="false"/>
</httpHandlers>
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</httpModules>

這資料可以參考【ASP.NET AJAX-Enabled Web Site】的 web.config 設定檔。如果您在 Web.Config 沒有加上這設定,會出現
'Sys'未被定義 的 javascript 錯誤訊息。

沒有留言:

張貼留言