2009年3月20日 星期五

動態置換 Master Page

在 .Net 2.0 提供了 Master Page 功能,可以讓我們將事先定義好的樣板快速的套用在各個開發頁面。接下來要介紹的,是讓一個頁面可以透過程式動態的去變更頁面的 Master Page。

舉個例子來說,我們設計了兩個 Master Page,一個叫做 MTeacher.master (專門提供給老師看的樣板),另一個叫 MStudent.master(專門提供給學生看的樣板)。當檢視我們頁面的使用者是老師時,就要選用 MTeacher.master,當視我們頁面的使用者是學生時,就要選用 MStudent.master。

直覺的,很像可以在程式裡直接去設定  MasterPageFile ,如下所示:


protected void Page_Load(object sender, EventArgs e)
{
MasterPageFile = "MTeacher.master";
}

但回傳的結果卻是:
'MasterPageFile' 屬性只能在 'Page_PreInit' 事件內或之前設定。

根據錯誤訊息的提示,如果要設定 MasterPageFile ,必須要在 Page_PreInit 事件執行才可以。所以,改採用 覆寫 Page_PreInit 事件,應該就可以了。動手改一下程式如下:

protected override void OnPreInit(EventArgs e)
{
MasterPageFile = "MStudent.master";
string strType = "" + Request["isTeacher"];

if(strType=="1")
MasterPageFile = "MTeacher.master";


base.OnPreInit(e);
}


為了簡單起見,透過 URL 參數 isTeacher 來決定登入者角色是否為老師。 當 isTeacher 是 1 時,即表示目前是老師在檢視頁面;如果不是 1 ,則為學生。程式修改後,就可以正確的呈現出我們所希望的樣子了。

當你有需要更換 MasterPage 樣板時,記得要覆寫 Page_PreInit 事件,並在這事件裡完成你的程式。

沒有留言:

張貼留言