Atlas UpdatePanel使用技巧以及常見問題

原文地址:http://www.cnblogs.com/dflying/archive/2006/04/01/363998.html

English Version: http://dflying.dflying.net/1/archive/103_atlas_updatepanel_tips_and_faqs.html

好多開發人員將會從UpdatePanel控件開始慢慢接觸Atlas。UpdatePanel功能強大並且使用簡單,同時也拉近了我們和Atlas的距離。

我曾在此發表了一個對UpdatePanel的簡要介紹(http://dflying.cnblogs.com/archive/2006/03/25/358547.html)並得到了很多的反饋與問題。我想有必要把這些問題以及有關UpdatePanel的使用技巧總結成一個帖子。希望能有所幫助。在這裏感謝阿不,dudu以及所有提出問題或參與討論的朋友,讓我對UpdatePanel有更深的認識。

首先,最重要的事情就是關注Atlas的老家:http://atlas.asp.net/。我們知道Atlas是一個新的,正在開發中的Framework,每月,甚至每週都在發生着變化,所以作爲一個Atlas開發人員,經常關注http://atlas.asp.net/是必須的,你會得到最新的消息,最新的特性以及最新的演示程序。對於新手,http://atlas.asp.net/docs提供了Atlas的API,Class文檔可作參考(尚未全部完成,請多加關注)。下面還有一些Atlas以及ASP.NET的核心人物的個人網站/blog,同樣值得經常訪問(英文):

  1. http://blogs.msdn.com/brada/
  2. http://weblogs.asp.net/scottgu/
  3. http://www.nikhilk.net/
  4. http://weblogs.asp.net/bleroy/
  5. http://blogs.msdn.com/jhawk/

Atlas UpdatePanel服務器控件使用技巧:

  1. 務必設定ScriptManager的EnablePartialRendering屬性爲true。有好多人向我抱怨說他們的UpdatePanel並不以AJAX的方式工作而還是引發普通的整頁PostBack,原因就在於沒有設定這個屬性。
  2. 設定觸發UpdatePanel的控件爲服務器控件。因爲無論ControlValueTrigger還是ControlEventTrigger,指定的屬性/事件都是服務器端屬性/事件,都只在服務器端屬性變化或是服務器端發出事件時才能觸發UpdatePanel的PostBack。
  3. 區別UpdatePanel的兩種更新方式AlwaysConditional。請參考:http://dflying.cnblogs.com/archive/2006/03/25/358547.html。我們應該設定正確的更新方式以避免更新不必要更新的Panel,造成不必要的性能/網絡開銷。
  4. 不要使用UpdatePanel。如果你從頭開始建立一個Atlas程序,僅僅使用UpdatePanel來實現AJAX可能並不是最好的選擇。UpdatePanel僅僅簡單的從頭渲染所有的位於ContentTemplate內部的控件,在某些情況下可能非常低效,例如,對於一個包含了一個有相當多結點的TreeView控件的UpdatePanel來說,如果你只是想簡單的添加一個新節點,使用UpdatePanel將會從後臺取得整個TreeView並重新渲染,遠不及僅存儲後並把這個新的節點添加到TreeView中來得高效。在這些情況下,你最好考慮使用一些較高級的Atlas客戶端控件。當然,這也加大了一些開發的難度。
  5. 在頁面的InitComplete事件被引發前必須保證UpdatePanel已經被初始化。也就是說,不能將UpdatePanel放置於比如一個DataList的HeaderTemplate中,因爲HeaderTemplate中的內容是在Databinding時期纔得到的,而這時頁面的InitComplete事件早已經結束。
  6. 在UpdatePanel中不要使用Response.Write(); 。這會擾亂UpdatePanel的執行過程。
  7. Atlas的客戶端腳本可以使用於任何的開發平臺/語言中。例如ASP.NET 1.1,純HTML甚至PHP,但是像UpdatePanel這樣的服務器端控件只能用於ASP.NET 2.0頁面中。Atlas的客戶端腳本實際上就是一些經過組織的JavaScript文件,當然是與服務器端選用的技術無關的。但當你使用非ASP.NET 2.0環境時,需要手動加入對這些JavaScript文件的引用,因爲你無法使用ASP.NET 2.0中的服務器端控件ScriptManager。
  8. 小心在UpdatePanel中包含第三方JavaScript實現的組件。開發跨平臺的JavaScript Framework是一件很艱鉅的任務,在目前的Atlas實現中仍有很多兼容性的問題。讓我們期待未來會更好或者乾脆現在想辦法自己解決吧。

同時,在頁面上添加一個UpdateProgress服務器端控件將會使用戶瞭解你的程序在做什麼。下面順便提一些UpdateProgress控件的使用技巧:

  1. 在頁面上添加一個且只添加一個UpdateProgress控件。UpdateProgress控件應當是一個全局的控件,所有的AJAX操作都會自動地由UpdateProgress控件來處理。想象一下如果Gmail一下子顯示了好多個Loading提示,用戶一定會不知所措吧。
  2. 在UpdateProgress的Template中有一個magic IDabortButton,你可以提供一個服務器端Button或者LinkButton控件並指定ID爲abortButton,使用戶可以取消當前執行的AJAX請求。當然,使用magic ID並不是一個好的設計方法,相信在未來的版本中這個magic ID會被一個類似的東西取代。當然,在當前的Atlas版本中,請記住abortButton。

如有錯誤,還請不吝指正。相關問題也十分歡迎留言探討。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章