樣板A |
樣板B |
自己參考了 Ryan 的 「Dynamically Loading Master Pages in ASP.NET 2.0」文章,整理了一些測試程式。
首先建立 Dynamic 類別,為了讓需要動態切換的頁面來繼承。在程式中,是假設日後的樣板資訊是留存在 DB ,所以這邊會去 DB 抓資料回來。
namespace CMaster { public class Dynamic:System.Web.UI.Page { protected override void OnPreInit(EventArgs e) { string strMaster = GetMasterFromDB(); if (!strMaster.Equals(string.Empty)) { base.MasterPageFile = strMaster; } base.OnPreInit(e); } //模擬從 DB 抓取 Master 設定 private string GetMasterFromDB() { return "~/SK02.Master"; } } }接著將需要動態切換 Master Page 的頁面,將其頁面的繼承改為 Dynamic ,以自己的範例來說,就是修改 MyPage.cs 如下:
namespace CMaster { public partial class MyPage : Dynamic { protected void Page_Load(object sender, EventArgs e) { } } }這裡將 原先的 public partial class MyPage : System.Web.UI.Page 改成
public partial class MyPage : Dynamic
如此就可以完成動態切換 Master Page 的需求了。
在 Ryan 的文章中有提到透過設定 web.config 的 pageBaseType 可以達到一次設定所有頁面都支援動態切換 Master Page,但使用這方法要注意,你的程式必須是使用 Inline mode 開發,如果是使用 Code Behind (預設都是採 Code Behind),則設定 web.config 這種方式就會失效囉。
參考:
01:Ryan ,「Dynamically Loading Master Pages in ASP.NET 2.0 」
沒有留言:
張貼留言