使用 Google 搜尋本站文章:
首頁 | CodeCharge 討論板 | 部落格 | ASP.NET 電子書 | 相簿 | News | 網站導讀 | 聯絡 Allen | 訂閱 RSS
 
since 2004 
 


如何在 page 裡存取 masterpage 中usercontrol 的屬性

By Allen Kuo, 建立日期:2012/01/09 13:34 ,最後修改日期:2012/01/09 14:43
...
    加入書籤: 收進你的MyShare個人書籤

藍色小舖裡有一則提問

在MasterPage 上有一個Class 為MySelector 的UserControl其ID 為MySelector1, 現在我要在子網頁上引用MasterPage上的MySelector1,我使用的
mySel = (UserControl)this.Master.FindControl("MySelector1");
但這樣做,並不能設定MySelector 的所有屬性,但如果用
mySel = (MySelector)this.Master.FindControl("MySelector1");
程式又回應 不認得MySelector, 請問要如何讓我的子網頁也認得這個UserControl 的Class 呢?

 


 

我在之前有寫過一篇, 如果看懂應該就可以寫得出來才對。

 

針對這個問題,我們應該這麼思考:

  • 網頁套用 MasterPage 主要是方便讓多個網頁能有相同的版型; 但其實 page 也可以 runtime 套用其他版型, 或在 vs.net 裡直接修改成套用其他 masterpage, 所以 page 裡其實本來就不應該想要去控制 MasterPage 裡的控制項, 因為哪天換了 MasterPage 也許程式就發生錯誤。
  • 沿續上述的思考觀點, 在 page 裡更不應該使用 FindControl("MySelector1"), 因為不同的 MasterPage 也許會為將這個 user control 取不同的名稱, 屆時你的 page 豈不是要根據 masterpage 的不同而變動不同 id ?

所以, 遇到這類問題, 我的思考邏輯會是

  1. Page 只面對 MasterPage, 告訴 MasterPage "我想傳XX值,至於你要轉交給誰,我不管; 或者我想取得XX值, 請你給我,至於你要向哪個 control 索取, 我不在乎"
  2. MasterPage 要向哪一個 user control 索取資訊, 或傳值給什麼 user control, 是 MasterPage 的責任, Page 不必明白

 所以, 我的做法會是

  1. 先設計一個 interface, 裡面定義了存取值的 method or property
  2. 要求 MasterPage 實作上述 interface
  3. 在 Page 裡將 MasterPage 轉型成該 interface, 並叫用它的 method or property
  4. 至於 MasterPage 要將資訊傳給什麼控制項, Page 並不必理會, 因為那是 MasterPage 應該負責的事情

 


回應


姓名: (必填)
Email:
內容: (必填)
驗證碼:   (請輸入圖片中的文字,不區分大小寫)
Copyright © AllenKuo.com , 2000 - 2012, Version 11.08