[ASP.NET]91之ASP.NET由淺入深 不負責講座 Day22 - DIP 依賴反轉原則
前言
經過了Day14~Day22的洗禮,相信大家已經腦袋裡面都是OO來OO去,抽象來抽象去了...
接下來我們又要介紹比較實作面的東西了。
今天要介紹的是UserControl跟MasterPage,它們之間也有繼承與封裝的概念,
所以前面的OO概念,是不會白白浪費的。
至於SOLID原則,則是寫code的過程,應該要要求自己程式品質時的一個基準點。
Issues
UserControl
- 副檔名為.ascx,與網頁類似,但不能直接連接至user control
- 需要設計對外的property、function跟event,典型的封裝概念
- 也有control的事件生命週期
- 實作了INamingContainer:
識別在 System.Web.UI.Page 物件的控制項階層架構內建立新 ID 命名空間的容器控制項。
也就是放在UserControl裡面的控制項,ID會再加上container的ID當prefix。
- 可以在IDE就看到畫面
- 可重複使用(但較難跨專案使用),如電話控制項、地址控制項,跨專案使用,就是透過複製貼上。 也可以考慮設計成custom control,則只需要將dll拉至工具箱內即可。
- User control之間的互動,請參考連結:http://www.dotblogs.com.tw/sin1980/archive/2009/09/27/asp1.aspx
- 動態新增user control注意事項
MasterPage
- 繼承UserControl
- 各頁的aspx置放於ContentPlaceHolder中
只是變形的UserControl,有套用MasterPage的頁面,只是把自己的內容放在ContentPlaceHolder中
- 假設A頁與B頁有套MasterPage,由A頁導到B頁,這兩頁仍是不同的頁面
- 與frame不同
- MasterPage上也可以撰寫共用的function
如Tree、頁籤、共用按鈕、共用資訊等..就跟UserControl可以設定對外function一樣。
- 使用上小心效率問題
因為每個套用MasterPage,都會跑到相關程式
- 注意事項
- 關於Content Page中加入CSS或JS檔的引用
參考:http://social.msdn.microsoft.com/Forums/zh-TW/236/thread/0deaae5c-46d9-40e4-83b8-e114c2db79f3 -
- 巢狀 MasterPage架構下,取得master中物件的問題
參考:http://social.msdn.microsoft.com/Forums/zh-TW/236/thread/2eb55775-252c-464c-87d4-fa2b7ef14f45
<script type="text/javascript" src='<%#ResolveUrl("~/JavaScript/jquery.cookie.js") %>'></script>
protected override void OnLoad(EventArgs e) { base.OnLoad(e); Page.Header.DataBind(); }
- 關於Content Page中加入CSS或JS檔的引用
<asp:ContentPlaceHolder ID="MainPlace" runat="server“ />
blog 與課程更新內容,請前往新站位置:http://tdd.best/