![]() |
| 樣板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 」


沒有留言:
張貼留言