加入RUN!PC粉絲團
最近新增的精選文章
 
最多人點閱的精選文章
 
 
精選文章 - 開發技術
分享到Plurk
分享到FaceBook
 
新一代 .NET Framework 4.0的4大主軸(1)
ASP.NET Web Form技術精華
文/董大偉

一如預期,微軟最新一代的Visual Studio在2010年第二季準時推出。對於這個世代的開發人員來說,Web應用程式幾乎已經是開發技術的標準,再也沒有人質疑Internet存在的價值,或是懷疑應用程式執行在網際網路上的形式,過去的網路泡沫化早就被我們拋在腦後,甚至仰賴Internet的雲端技術也開始被大家視為理所當然的趨勢。而象徵著.NET開發技術更加成熟穩健的4.0版本,以及整合了現代化開發技術與管理機制的Visual Studio 2010,正是打造無所不在的網路應用,相當關鍵的基礎平台。

回顧過去每一個世代,幾乎ASP.NET的每一個版本,都成功的扮演了適當的角色,達成了當時設定的階段性任務。ASP.NET 1.0透過Code-behind技術一舉推翻了過去ASP開發時代HTML與程式碼夾雜的狀況,同時把物件導向程式設計的精神與事件驅動(Event-Driven)帶入了Web應用程式開發的世界;ASP.NET 2.0則透過新的資料庫存取技術,讓Web資料庫應用程式的開發大幅簡化,並且透過新增的控制項有效地提高開發人員的產能。


ASP.NET的發展
緊接著ASP.NET 3.5則伴隨著.NET 3.5的推出,將微軟重要的查找技術LINQ以及LinqToSql加入了ASP.NET當中,並且把ASP.NET AJAX正式納入成為產品中重要的一環;而ASP.NET 3.5 SP1則宣示了透過Dynamic Data技術,建構高延展性的Web資料庫作業程式的可能性,並同時帶著ASP.NET MVC Framework 1.0打下高階商用Web應用程式的基礎。

經過上述簡介你會看到,在ASP.NET 2.0正式地在市場上站穩腳步之後,微軟分別再釋出的3.5與3.5 SP1這2個版本,已逐步的提供了一個良好的基礎架構,利用AJAX、MVC、Dynamic Data等技術向開發人員宣告:「ASP.NET將不僅僅是如此而已,接下來要出現的才是回應企業大型Web應用程式開發需求的重頭戲」。

而今天,各位所看到的ASP.NET 4.0,就是微軟集Web應用程式開發技術之大成於一身,所推出的解決方案。接下來我們將帶領讀者鳥瞰ASP.NET 4.0技術,以及針對這些技術所帶來的革新與可能性。


更完整的Web Forms技術
從ASP.NET誕生到現在接近10年的淬煉,讓ASP.NET Web Forms各方面均已經相當成熟而穩定,如今開發人員面對的只是如何更妥善的將其應用到日常的開發工作當中。為了更體貼開發人員的需求,ASP.NET Web Forms在這次的改版中也有不少在功能上的增強。當你取得Visual Studio 2010後,首先映入眼簾的是更豐富的專案範本,如圖1。

圖1:較以往更豐富的專案範本。


過去我們已經很熟悉的ASP.NET Web Forms範本上,你會發現有一個「空白Web應用程式」,和過去不同的是這個範本建立出來的專案相當乾淨,如圖2。

圖2:相當乾淨的範本。


你會發現當你將同一個專案,選擇不同的.NET Framework支持版本之後,針對同一個控制項或物件,不管是屬性視窗或是Visual Studio 2010當中的IntelliSense都會跟著調整,並提供正確的選擇,這對開發人員來說確實相當方便!圖3是同一個專案在選擇了不同的編譯對象後,IntelliSense隨即跟著改變的範例。

圖3:選擇不同的編譯對象後IntelliSense將隨之改變,此為 Visual Studio 2010的多目標支援功能 (Multi-Targeting Support)。



多目標支援功能 (Multi-Targeting Support)
這次微軟將過去常造成困擾的Web.Config大幅簡化,並且把主要的部分放入了machine.config中,可直接讓Web.Config繼承使用。同時你會發現其中的「targetFramework="4.0"」,表示著該專案是透過.NET 4.0來開發。

值得一提的是,Visual Studio 2010的多目標支援(Multi-Targeting Support),在多定向功能上已有相當幅度的改良。因為從2.0到4.0的版本更迭過程中,在NameSpace和Object Model上已累積許多同名的物件,但由於不同版本支援的成員(屬性、事件、方法)則有所不同,開發工具適時的提供了這些支援,讓多目標支援功能在真實世界的專案開發應用上更有價值。


具備專案所需的完整範本
上面介紹的是空專案,如果你建立的是傳統的「Web應用程式專案(或ASP.NET網站)」呢?在圖4中你會看到專案比過去預設樣本豐富很多,是的!被社群所強烈支持的jQuery也納入了ASP.NET的預設範本當中。

圖4:預設樣本變多。


同時,支援Forms驗證的帳戶管理機制(在Account資料夾下),也自動地被加入(這一招是學ASP.NET MVC專案範本,因為廣受開發社群歡迎,所以Silverlight和ASP.NET Web Forms現在也比照辦),所以當你直接編譯建置並執行這個網站,不需要寫任何一行程式碼,會看到它已經是一個可以註冊新帳戶,並且有預設的登入權限管理機制的網站了,如圖5,這對於入門的開發人員來說,可謂是一個福音。

圖5:不需要寫程式碼,就已經是一個可以註冊帳戶與權限管理機制的網站。



搜尋引擎最佳化
當然除了這些範本與開發環境上的擴充之外,在ASP.NET Web Forms本身也有相當多的增強,首先我們看到的是搜尋引擎最佳化(SEO, Search Engine Optimization)的支援。

對於很多企業來說,自家的網頁在搜尋引擎上能否被快速的找到並且呈現出正確的資訊,是相當重要的課題。在新版的ASP.NET 4當中,增加了Page.MetaKeywords以及Page.MetaDescription這2個屬性,這讓開發人員可以輕易的在網頁中加入可供搜尋引擎檢索的訊息。當然,開發人員也可以透過.aspx的頁面修飾字來處理。


ViewState的範圍限制
在效能提昇的部分,過去ASP.NET的開發人員大概都知道,對於使用了大量控制項的ASP.NET頁面來說,ViewState是一個令人困擾的問題,它讓網頁大小快速的膨脹造成postback時的負擔。在早期的ASP.NET版本中,ViewState的控制得要針對一個個控制項分別進行,因此當頁面上的控制項一多時,對開發人員來說又是個額外的負擔。

在ASP.NET 4當中,則增加了「ViewStateMode」屬性,讓我們得以透過指令碼,針對特定的範圍來控制ViewState。如此一來,開發人員就不需要再針對每一個控制項來設定,而可以針對一群控制項進行ViewState的設置。


Cache存放方式的客製支援
關於效能的部分,還有一個重要的機制,過去ASP.NET 3.x時代,Web Forms已經提供了相當優秀的Cache技術,讓開發人員可以透過Cache盡可能的降低伺服器端的負擔,加快網頁下載速度,但在預設狀況下Cache資料永遠是儲存在記憶體中,而ASP.NET 4.0則讓我們更有彈性,可以針對不同情境下的需求,將Cache資料存放在不同的位置(例如硬碟、或資料庫)。

你可以透過實作OutputCacheProvider來完成這樣的工作,只需要實作4個Method,並且在Web.Config中將預設的Cache Provider指向我們所設計的「MyOutputCacheProvider」即可。只要你的ASP.NET頁面使用到「OutputCache」時,相關的Cache資料的儲存就會導入到你所客製的儲存機制中。


Client ID的明確化
隨著這幾年瀏覽器用戶端程式碼(例如JavaScript/jQuery…等)的盛行,有一個長久以來一直存在的問題,被更強烈的突顯了出來,那就是ASP.NET控制項的ClientID。

過去ClientID也是一個常常困擾開發人員的問題,主要的原因是APS.NET在Render出HTML網頁到用戶端時,ClientID常常是動態且無法確定的,特別是ASP.NET頁面加上了master-page、UpdatePanel,或是那些會隨著資料錄數量而可能動態產生出不同資料列的GridView、ListView、Repeater控制項之後,ClientID則更加的不可測了。

面對這個問題,ASP.NET 4提出了新的ClientIDMode屬性,可透過AutoID、Static、Predictable、Inhert,這4種不同的設置值來決定ClientID的Render方式,讓開發人員在程式碼中透過屬性來設定ClientID產生的方式。

舉例來說,當你在使用ListView控制項來顯示多筆資料時,可同時設置ClientIDMode屬性為"Predictable",並且把ClientIDRowSuffix設置為「CustomerID」( CustomerID為欄位名稱),如此一來,你會發現Render出的HTML碼當中,ClientID是跟著我們提供的CustomerID值(資料庫CustomerID欄位的值)。

這對於需要撰寫用戶端程式碼(例如JavaScript)的開發人員來說,將可輕鬆的明確得知透過ASP.NET從後端動態產生的HTML碼中,實際上對應到的DOM元素名稱為何,不再需要如同瞎子摸象般的胡亂猜測了。

反過來說,如果你將ClientIDMode屬性改為AutoID,則呈現出的HTML將會變成連續編號:


Url Routing的支援
而ASP.NET 4的Web Forms當中,最令人激賞的莫過於是URL Routing機制的全面支援。過去在ASP.NET 3.5 SP1當中,Web Forms或多或少就開始支援URL Routing機制,它讓我們在網址的呈現以及使用上更加的有彈性。

過去我們在ASP.NET當中,習慣網址呈現方式:「http://myWebSite/EditProduct.aspx?Id=1」,但最近幾年REST風格的網站(或REST Web服務)興起,你常常會看到網址的呈現方式變成:「http://myWebSite/Edit/Product/XBOX」。

網址如此轉變的好處,首先,網址可以更明確的表達想要呈現的功能,或是要後端應用程式進行的行為。其次,以往網址由於並非對應到後端某一個實體檔案(.aspx.cs),而是透過Routing機制來轉派,因此相較過去的網址有著更高的安全性。

也就是說,在這樣的架構下,ASP.NET應用程式的網址再也不只是對應到實體檔案的路徑,而是可用來表達要執行的功能,至於實際執行時要處理的程式碼或呈現結果的網頁,並非一定要是網址所指向的頁面。

此外,這也讓我們在開發應用程式時有更大的彈性,例如一般的部落格網站網址可能是:「http://blog.ria101.com.tw/studyhost」,由於blog網站多半都可以開放給多人申請,理所當然的每一個用戶都有類似「http://blog.ria101.com.tw/申請者ID」這樣的網址。

當然,對應到ASP.NET的後端應該都是同一套程式來處理,在過去的ASP.NET應用程式當中,我們得要煞費一番工夫才能讓網站可以接受這樣的網址設計(把參數從QueryString轉變成REST風格),而現在,透過URL Routing機制很快地就能輕鬆搞定。

在ASP.NET 4當中,只需要透過新加入的Routes類別,利用MapPageRoute方法即可輕易的完成URL路由的指定,之後當使用者在網址列鍵入:「http://localhost:1031/Search/AK47」,網頁將導引到WebForm1.aspx頁面,而在該頁面中則可以透過簡單程式碼來取得參數ProductName「AK47」。

果然方便容易許多!別小看這樣的機制,這讓我們開發大型的Web應用程式變為可能,配合我們後面要介紹的DynamicData技術,得以輕易的開發出一張.aspx網頁(一套程式),即可維護Schema不同的各種資料表。不像過去舊版ASP.NET時代,若後端資料庫有許多資料表要處理,我們幾乎得要為每一個資料表建立一張.aspx維護頁面,即便每一張.aspx網頁的行為幾乎完全一樣(CRUD)。

更有趣的是,配合URL Routing,連過去我們熟悉的DataSource控制項都增加了一個RouteParameter來共襄盛舉,如今ASP.NET 4.0 Web Forms可說是對URL Routing機制全面支援了。


Linq查詢的支援
說到了DataSource,如果你已經開始使用Linq查詢技術,那你大概對於LinqDataSource或EntityDataSource不會感到陌生。在ASP.NET 4.0當中,還增加了QueryExtender控制項,作為你在使用Linq查詢資料時不可或缺的功能。

過去我們可能習慣透過where敘述進行資料的查詢與過濾,現在你也可以透過QueryExtender中諸如SearchExpression、RangeExpression、PropertyExpression、CustomExpression等眾多不同的篩選器,讓資料查詢變得更加的簡便有力。

以QueryExtender為例來看,底下這段指令碼中的,使用到了RangeExpression過濾器,可幫助開發人員可輕易地達成特定範圍區間內資料的搜尋。其中我們搜尋的對象是大家熟悉的Northwind資料庫的Products資料表,我們設定了QueryExtender,要求查詢Products資料表中UnitPrice值介於TextBoxFrom與TextBoxTo之間的資料:



查詢的結果如圖6,不需要撰寫任何一行程式碼,透過QueryExtender即可幫助我們輕易地找出單價在18到20之間的產品。這是一個時常需要撰寫資料庫應用程式的開發人員,所需要注意與關切的新功能。

圖6:QueryExtender查詢結果。



其它控制項的提昇
至於ASP.NET 4當中正式納入(其實在3.5 SP1當中就已經可以下載取得)的Chart Control,從圖7的這張圖片中你會發現,現在我們可以輕易的透過Chart Control,在網頁上呈現出精緻的圖表。

圖7:透過Chart Control在網頁上呈現出精緻的圖表。


除了圖表控制項之外,諸如FormView、ListView、CheckBoxList and RadioButtonList、Menu、Wizard and CreateUserWizard等,這些控制項或多或少都有一些功能與呈現方式的改變,由此也可發現微軟針對開發社群長期以來的一些期待有了明確的回應。


結語
經過本文你一定也發現,ASP.NET Web Forms已經是一個很成熟的開發技術,預期將可以有效的提昇開發速度。當然ASP.NET 4.0不只如此,ASP.NET MVC、Dynamic Data等技術,同樣扮演相當重要的角色,而這些技術正是面對現代大型Web應用程式開發時不可或缺的基礎。