Master Page的概念,對沒接觸過ASP.Net的人而言是很陌生的東西,其實說穿了就有點像PHP用include或require將某些固定不更動的網頁做統一的設定,不用將那些不變的設計部份重覆散落在每一份網頁裡面。類似表頭,或頁尾一些公司資訊等等。

而Master Page是將不變的部份先做成一個MasterPage.master檔,在需要變動的部份置入ContentPlaceHolder元件,待產生新網頁時先與這個MasterPage做關聯後,再編輯可變動的部份。但這篇重點也不是在講解這些概念,只是在講如何從Content Page裡去修改到原本不會變動的Master Page資訊。

將Master Page看成是公共場所,而Content Page就像是在其中的私有領域空間。若是在Master Page中還是置入了一些ASP.Net元件,例如一個Label好了,在Content Page中去觸發某個動作(比如按了Button),想要去改到這個屬於公共場所的Label Text內容,作法如下。

在Content Page的Button_Click中,先使用Master.FindControl(string ctrlid)方法去找到該元件。回傳型別是Control類別,要做明確的轉型(當然你要明白知道自己在做什麼,該轉成何種類別,錯了編譯器也不會幫你debug),例如明確轉回Label類別。

例如:

Label lbl1 = (Label)Master.FindControl("Label1");
lbl1.Text = "Changed from content page";

記得,在FindControl()中傳入的字串是該元件的ID,若是Master Page沒有此ID的元件,會在run-time中拋出NullReferenceException的例外,因此在這種非鬆散耦合(loose coupling)的設計是具有高相依性的危險設計。也就是說,全憑名稱判別,若是Mater Page的該ID換了名字(比如設計Master Page是另一個視覺設計師),就會突然造成該呼叫FindControl的Content Page造成無法預期的run-time錯誤!

另外,若是在Content Page中要在程式中動態改變Master Page的Title,則可以使用Master.Page.Title直接指定值則可。

 

創作者介紹
創作者 雷.IT and Me 的頭像
rexmen

雷.IT and Me

rexmen 發表在 痞客邦 留言(1) 人氣( 8391 )