如何理解VS2003 ajax的一些常用辦法
VS2003 ajax更名為asp.net ajax前,安裝了開發包就可以在網站的BIN目錄下生成相應的atlas的dll文件,這樣發布時連同所有的dll組件都會發布出去,但是目前VS2003 ajax準備在VS2007集成到工具箱中,所以現在在VS2005上安裝rc版的ajax時,其控件的命名空間已經變為:System.Web.Extensions,在發布網站的時候在bin目錄中也不會產生任何的DLL組件。
這是什么原因呢?是我的程序有誤,仔細對代碼做了檢查,并沒有發現什么問題。或者是配置文件的問題,我和其它測試成功的項目配置文件比較,完全相同。百思不得其解,但明白應該是轉換時造成的遺留問題。這個問題困擾了我幾天,在網上也沒有找到答案,前天參加陳黎夫(Dflying Chen)《css禪意花園》新書見面會,也沒有找到明確的答案。
將那個項目應用ajax的計劃只好暫時放棄,但心中又有一些不甘,總想找到問題所在(完美主義者)。開始仔細比對VS2003和VS2005項目,終于發現資源文件AssemblyInfo.cs在VS2003 ajax下是沒有的,2005下資源文件放在web.config中,但項目在轉換后,仍然保留了這個文件,可能是考慮到有些特殊的配置信息存在,保留下來便于手工調整。
打開這個文件,除了版本外并沒有寫入其它什么東西,試著把它刪除看看吧,沒想到還真就是這兒的問題,局部刷新的終于效果出來了。 #t#
問題是解決了,但道理在哪兒呢?或許正如前面所述,轉換工具特意保留了這個資源文件,在2.0的環境下,發現存在這個資源文件,就直接從這里讀取信息,結果保存在web.config中的相關配置信息反而被忽略了,從而造成異步調用時無法找到相應的資源、ajax失效的情況。
當然,我的水平有限,以上原因只是猜測,希望高手指點迷津!
有一個項目,是由VS2003轉換到VS2005下的,這段時間學習了asp.net ajax,感覺還不錯,就想著將其應用到部分頁面,MS的東西用著就是簡單,很快就完成,興沖沖地就想看看成果,系統正常啟動了,沒有任何錯誤,誰知在我改變下拉列表的選項時,本來應該是UpdatePanel包含的那一塊內容刷新,現在變成了整個頁面都刷新了,也就是異步調用變成了同步調用。
測試環境:
開發機器winxpsp2,VS2005sp1,服務器發布win2003sp4,.net2.0framework
希望早日用上正式版的VS2007
解決辦法:
1,在開發機器上安裝ASPAJAXExtSetup.msi本文發布日期是07年2月份,ajax版本是RC1
2,找到ajax的安裝路徑,我的是C:\Program Files\Microsoft ASP.NET\ASP.NET 2.0 AJAX Extensions\v1.0.61025
把其中的System.Web.Extensions.Design.dll和System.Web.Extensions.dll兩個文件拷貝到你的網站的bin目錄中
3,希望你的網站是新建立的,把ajax目錄中的web.config拷貝到你的網站的根目錄中覆蓋以前的,如果你已經對你的web.config進行過編輯的話,還是手動把相關設置節復制到你的web.config中。
4,到控制面版中卸載asp.net ajax 1.0
5,然后添加對你網站中bin目錄中的這兩個DLL文件的引用,如果你的VS2005打過sp1,在網站的“解決方案資源管理器”中的“引用”加入這兩個DLL文件來增加它的命名空間。
6,發布網站
7,如果還想用ajaxtoolkid的話請將相應的dll文件復制到bin目錄下,并添加引用
一些說明:
建議把VS2005打上sp1補丁,可以直接新建asp.net項目,有自己的項目文件,一個頁面有三個文件構成,像是回歸到VS2003了,也許sp1更貼近vs2007吧。
如果不打這個補丁,在母版頁面的子頁面中的ajax控件會出現驗證(Intellisense)失敗的問題。
忠告:
atlas版本眾多,幾天一變,終于到了RC,還可能有RC1,RC2等,建議減少代碼的復雜度,以便適應升級,還好一度被拿掉的timer控件又回來了。
VS2005的sp1是史上比較恐怖的東西,安裝前一定要有足夠的準備(包括心理準備)
設置器中所有VS2003 ajax控件的tagPrefix名都變成了"asp",不再是以前的cc1這類的命名了,就像普通服務端控件一樣了。