網上有很多文章介紹如何在MOSS中使用Ajax1.0的架構。其實自從.net3.5推出之後,在.net3.5中已經內建了Ajax的功能。本文主要介紹如何在VS2005中使用.net3.5中的Ajax功能,以及如何在MOSS中使用.net3.5中的Ajax功能。
首先肯定需要下載一個.net3.5,這個網上有很多。
下面就主要介紹一些和Ajax1.0在使用和配置方面有差別的地方,至於.net3.5中Ajax的具體使用和Ajax1.0是差不多的,園子裡也有很多的介紹文章。
一、在VS2005中使用
以前Ajax1.0的時候可以下載一個VS2005的外掛程式,安裝好之後會多出一個特定的Ajax的項目,建立這種類型的項目就可以使用Ajax1.0的功能了。
這個外掛程式主要做了兩件事:
1、在網站的web.config中加入了一些配置項。
在.net3.5的時候我們可以手工在web.config中加入Ajax的配置: <httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
</httpHandlers>
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpModules>
從配置上看相對Ajax1.0的時候,更加簡單了,而且使用的也是.net比較規範的方法,通過註冊一些httphandle和httpmodule來捕獲特定的Ajax的請求達到非同步重新整理的效果。
2、在工具箱中加入Ajax的控制項
我們也可以手工在VS2005的工具箱上-〉右鍵-〉選擇項....,然後在".net framework組件"的tab中選擇所有程式集名稱為System.Web.Extensions(3.5.0.0)的控制項,插入就可以了。
加入之後就會在工具箱中看到相應的控制項(當然只是一些基本的控制項),然後就可以按照Ajax1.0的方法進行開發了。
二、在MOSS中使用.net3.5中的Ajax功能
1、修改配置
這一步和上面一樣,將上面的配置加入對應MOSS網站的web.config檔案中就可以了
2、在VS2005中編寫Webpart
這個也是按照常規的方式編寫webpart,在這個webpart中使用Ajax中的控制項。但是自己的webpart要針對Ajax進行一些特殊處理。我這裡參考網上的資料寫了一個父類,可以直接從這個父類繼承就可以了。 1public abstract class AjaxBasePart : System.Web.UI.WebControls.WebParts.WebPart
2{
3 private ScriptManager _AjaxManager;
4
5 public AjaxBasePart()
6 {
7 }
8
9 protected override void OnInit(EventArgs e)
10 {
11 base.OnInit(e);
12
13 //取得存在的ScriptManager
14 _AjaxManager = ScriptManager.GetCurrent(this.Page);
15
16 if (_AjaxManager == null)
17 {
18 //建立ScriptManager
19 _AjaxManager = new ScriptManager();
20 _AjaxManager.ID = this.ID + "$AjaxManager";
21 _AjaxManager.EnablePartialRendering = true;
22
23 if (this.Page.Form != null)
24 {
25 //解決Ajax按鈕只能執行一次的問題
26 string formOnSubmitAtt = this.Page.Form.Attributes["onsubmit"];
27 if (!string.IsNullOrEmpty(formOnSubmitAtt) && formOnSubmitAtt == "return _spFormOnSubmitWrapper();")
28 {
29 this.Page.Form.Attributes["onsubmit"] = "_spFormOnSubmitWrapper();";
30 }
31
32 this.Page.Form.Controls.AddAt(0, _AjaxManager);
33 }
34 }
35 }
36}
最主要的代碼有兩處:
1、14行的地方取得ScriptManager對象,如果沒有的話才建立,然後在32行的時候作為form的第一個控制項插入。因為一個頁面中只能出現一個ScriptManager對象
2、在26-30之間用來解決UpdatePanel中的按鈕只能執行一次的情況。在MOSS中直接使用Ajax的控制項時存在一些相容性方面的問題,需要進行一些特殊處理。如果不加入這段代碼,那麼在UpdatePanel中出現的按鈕只能點擊一次,下次再點擊的時候沒有反應。