[ASP.NET]91之ASP.NET由淺入深 不負責講座 Day23 - UserControl & MasterPage

[ASP.NET]91之ASP.NET由淺入深 不負責講座 Day22 - DIP 依賴反轉原則

前言
經過了Day14~Day22的洗禮,相信大家已經腦袋裡面都是OO來OO去,抽象來抽象去了...
接下來我們又要介紹比較實作面的東西了。

今天要介紹的是UserControl跟MasterPage,它們之間也有繼承與封裝的概念,
所以前面的OO概念,是不會白白浪費的。

至於SOLID原則,則是寫code的過程,應該要要求自己程式品質時的一個基準點。

Issues
UserControl

  1. 副檔名為.ascx,與網頁類似,但不能直接連接至user control

  2. 需要設計對外的property、function跟event,典型的封裝概念

  3. 也有control的事件生命週期

  4. 實作了INamingContainer:
    識別在 System.Web.UI.Page 物件的控制項階層架構內建立新 ID 命名空間的容器控制項。
    也就是放在UserControl裡面的控制項,ID會再加上container的ID當prefix。

  5. 可以在IDE就看到畫面

  6. 可重複使用(但較難跨專案使用),如電話控制項、地址控制項,跨專案使用,就是透過複製貼上。 也可以考慮設計成custom control,則只需要將dll拉至工具箱內即可。

  7. User control之間的互動,請參考連結:http://www.dotblogs.com.tw/sin1980/archive/2009/09/27/asp1.aspx

  8. 動態新增user control注意事項
    1. [ASP.NET]動態新增User Control,並設定屬性值與取屬性值
    2. [ASP.NET]動態Load UserControl – part 2
    3. [Tips]UserControl動態新增時,轉型注意事項

 


MasterPage

  1. 繼承UserControl

  2. 各頁的aspx置放於ContentPlaceHolder中
  3. <asp:ContentPlaceHolder ID="MainPlace" runat="server“ />
    
  4. 只是變形的UserControl,有套用MasterPage的頁面,只是把自己的內容放在ContentPlaceHolder中

    1. 假設A頁與B頁有套MasterPage,由A頁導到B頁,這兩頁仍是不同的頁面
    2. 與frame不同

  5. MasterPage上也可以撰寫共用的function
    如Tree、頁籤、共用按鈕、共用資訊等..就跟UserControl可以設定對外function一樣。

  6. 使用上小心效率問題
    因為每個套用MasterPage,都會跑到相關程式

  7. 注意事項
    1. 關於Content Page中加入CSS或JS檔的引用
      參考:
      http://social.msdn.microsoft.com/Forums/zh-TW/236/thread/0deaae5c-46d9-40e4-83b8-e114c2db79f3
    2. <script type="text/javascript" src='<%#ResolveUrl("~/JavaScript/jquery.cookie.js") %>'></script>

    3. protected override void OnLoad(EventArgs e)
          {
              base.OnLoad(e);
              Page.Header.DataBind();
          }
    4. 巢狀 MasterPage架構下,取得master中物件的問題
      參考:
      http://social.msdn.microsoft.com/Forums/zh-TW/236/thread/2eb55775-252c-464c-87d4-fa2b7ef14f45

 


blog 與課程更新內容,請前往新站位置:http://tdd.best/