差不多是一年前(2006/2/23),去聽了一場Atlas(就是MS AJAX的前身)的研討會,Atlas頂著MS正宗的光環,搭上最火辣的AJAX話題,聽下來的結果卻讓我有些失望,於是我寫了一篇"Atlas -- Javascript老鳥的雞肋?"。嫌棄的重點主要在於當時的Atlas尚未成熟完備,很多地方需要改用新發明的Control,以編寫HTML Tag的方式編修;而Javascript的部分則提出了新一套的概念(OOP, Namespace... )。對已有Javascript經驗的老鳥而言,享受不到IDE編修的便利,又要付出用新物件重寫、學習新式Javascript語法的代價,還得綁ASP.NET 2.0,會不會比自己Hard Code Javascript好? 見仁見智。

一年後,得知Atlas正式定名為MS AJAX 1.0,並2007 Jan正式發行,陸續從http://ajax.asp.net 參考了一些資料,發現它的開發方式有了重大變革,處處讓人驚豔。直到昨天參加了微軟AJAX開發日,更完整地對MS AJAX的實作與功能進行了解,我想大聲宣佈: "醜小鴨變天鵝了,流鼻涕的黃毛ㄚ頭變成美豔的林志玲了! "

過去我對Atlas的不滿在於開發者常被迫在原有Control與AJAX enabled Control間做選擇、編輯方式以HTML Tag為主及得學習新式Javascript語法。而MS AJAX的設計重點之一即在於原來的程式不需重寫(當然改寫是免不了,千萬不要想得太美好呀)就能加上AJAX能力,AJAX的Control常以Extender的型式存在(類似Validator Control的概念),只需放在Web Page中,指定它要控制的Control ID,原本平淡的TextBox馬上就多了AJAX的效果,而不必辛苦地將TextBox換成AjaxTextBox,減少對原有程式寫法的衝擊。再不然,新的AJAX Control也常以Panel的形式存在,可以拖進VS 2005 IDE頁面中,直接在其中擺入TextBox、DataGridView等Control,原地升級,老狗馬上就學會了AJAX的新把戲。

減少了對原有做法的衝擊,也支援IDE的視覺化編輯,再加上很多情況下不必寫半行Javascript就能達到所需的效果,對大部分已經熟悉ASP.NET的開發者來說,MS AJAX非常容易上手。之前還有一條綁ASP.NET 2.0的限制,也隨著ASP.NET 2.0逐漸成為主流而重要性日淡。感覺上,除了Client Side Code不像純手工打造來得精簡及不易針對效能最佳化外(當然精簡化及最佳化是要會功夫及花功夫的),MS AJAX的容易上手、便於維護應是ASP.NET開發人員的第一選擇。

介紹MS AJAX的好網站很多(順手推一下AJAX開發兩位MVP講師的網站: 董大偉章立民),在此就不班門弄斧。我只用一個範例示範MS AJAX有多好寫:

我寫了一個網頁,上面有兩個Label及一個Button,後端程式如下:

protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
Label2.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}

按下Button後一般會觸發PostBack,但有意思的是這個Button按下去時網頁並沒有Postback,Label2的時間卻會跳動。很不可思議吧! 原來我在這個網頁上放了一個ScriptManager及一個UpdatePanel,然後再將Label2及Button1放入UpdatePanel中,這些配上看似平常的Page_Load更新顯示時間邏輯,居然就做出了一個AJAX式的網頁。

補充說明,這個範例意在突顯從原有設計加入MS AJAX後的變化,程式寫法並未最佳化。例如: Button在動態更新未變化,不應放入UpdatePanel中,而是要將UpdatePanel設成Contional UpdateMode,再掛一個AsyncPostBackTrigger到Button Click事件上,並且不應將Label1, 2的更新顯示邏輯都放在Page_Load以免看程式的人混淆... 等等。聽來很玄嗎? 這算給大家一劑預防針: 易學易用的東西,在學習過程中尤其不要輕忽了學習原理與訣竅的重要性,只知皮毛就抓刀狂揮,未必不是災難。


Comments

Be the first to post a comment

Post a comment