ASP.NET Dynamic Data
Tuesday, August 26, 2008 by Unknown
這是第一次覺得寫 CRUD 這麼的簡便和控制的完整性。
常常網站系統可粗略的分為前後台,通常後台是案子中僅次於套版的煩人,因為總有寫不完的新增(Create) / 檢視(Read) / 更新(Update) 和刪除(Delete),倒不是因為商業邏輯的複雜,而是一些前端的檢查和參數值的保存和維護等都是很花時間的手工,自認沒有很資訊焦慮,前天不小心逛到 ASP.NET Dynamic Data 的相關文章時,一天玩下來比初遇 ASP.NET MVC 還更要振奮!
一整天下來瀏覽器開了幾十個頁籤,且對這技術還不算很透悉,所以這篇比較像是自己看的摘要,和一些遇到的小問題分享,希望有興趣的人不用在花同樣的時間在探索 ^_^
現在的時間點搜尋的話,可能會發現有不同版本的畫面和目錄結構,這是因為之前有一個 Preview 的版本,但現在如果有安裝 .NET framework 3.5 和 Visual Studio 2008 SP1 的話,你所新增的 Dynamic Date Web Site 專案的目錄結構會和較早的畫面有所不同喔。 但這一篇還是要推薦一下,史考特大大的好文: New ASP.NET Dynamic Data Support 這一篇對於整個的架構寫得很好閱讀,看完後你會對於整個套件能做到的事情有一個底,竟是這樣的簡單,但不像之前的一堆 Web Control 一樣,可能拉一拉完結束後卻不知道怎麼做變化,但透過 Linq to SQL class 的 O/RM (object relational mapper) 管理資料表間的關係。
接著可以看看最新的教學短片,這邊你會發現之前的 App_Shared 資料夾已經不見了,這些影片從最基本的工具使用到整合第三方元件的作法,還有對特定頁面的客製化都有詳細的解說,史考特大大很用心的力做! The Official Microsoft ASP.NET Site
murmur..說了這麼多廢話,到底這東西可以做什麼? 基本上我認為他拿來做後台的頁面管理系統是非常好的工具和架構。不管資料表之間是否有關連,透過 Linq to SQL 還是可以正確的做異動,不像以前還要手工敲一堆 SQL Statement,不過還是建議 SQL 是一定要會的,就是懂了後面的原理再來使用這工具的話,才不會受限於工具。
就像這張圖一樣,如果網站管理者要每一區的維護功能的話,我的作法是透過 MasterPage 來做版面的統一,並且對於日後的維護較方便,接著對於每一區適合用 List 方式還做管理的就藉由 Dynamic Data 來做控制。
舉例的新聞管理功能來說,畫面就像第一張圖片這樣,可以對每一筆資料作 Inline 的編輯和處理,比較特別要注意的地方是圖片上傳的地方。例如我的 Picture 欄位,型態為 image,在剛拉好整個架構的時候是不會顯示出來的,也沒有辦法上傳圖片。在 ASP.NET 的 UpdatePanel 中,Upload Control 是不被支援的,就算把 Upload 丟到 UpdatePanel 中,接收到的值還是 null;在 PageTemplates 中的每個版面都是共用的,所以對於 Upload 這個特例,我把他丟到 CustomPages/News/ListDetail.aspx 還是有符合 table name 的路徑。
接著把 Update Panel 拿掉。如果你有看 Scott 大的解說影片就會知道我改的這個客製化頁面是不會對所有頁面做套用的,相當的方便和實用。
再依照 Sample for Displaying Images Updated + Screencast 的作法,就可以顯示正常外,也能正確的上傳和寫入圖片了。
ASP.NET Dynamic Data - ASP.NET Forums 許多問題在這裡都可以找到熱心的網友提供解答。
雖然一開始我也是把 Dynamic Data Web Site 放到前台的系統裡,功能雖然正常運作沒有問題,但會有總雜亂的感覺,所以之後我是把他獨立成管理專案處理,有需要整合到之前網站的朋友,可以參考這一篇的作法: How to add Dynamic Data to an Existing Web Site
Dynamic Data 初體驗寫的很亂,不過當你認真試用一段時間,在往後的開發中會多一項工具,當然不是全部都用這把屠龍刀解決,只是當環境和需求是這工具適合的時候,相信產能和品質都會不錯。