總結了一下ASP.Net訪問主版頁面控制項、屬性、方法及主版頁面中調用內容頁的方法,供大家參考: 首先,必須通過內容頁中的MasterTye指令,對主版頁面實施強型別化,即在內容頁代碼頭的設定中增加如下指令 <%@ MasterType VirtualPath="~/Master/MenuElement.master" %> 其中VirtualPath設定主版頁面URL地址。 1. 擷取主版頁面控制項引用。 範例程式碼 /// <summary> /// 擷取對母板頁中一個TreeView控制項的引用 /// </summary> public TreeView ElementStructureTree { get { return tvElementStructure; } set { tvElementStructure = value; } } 如上代碼所示,在主版頁面中定義一個公用屬性ElementStructureTree,該屬引用了主版頁面中tvElementStructure控制項,然後在內容頁中就可以通過公用屬性Master(核心對象Page的一個屬性)來引用主版頁面中tvElementStructure控制項,如下: TreeView tv = Master.ElementStructureTree; 2. 訪問主版頁面屬性。 主版頁面中的屬性一般有三種:實值型別、類類型、控制項類型,上面的“擷取主版頁面控制項引用”實際上就是訪問控制項類型屬性,其它兩種類型的屬性可以用同樣的方法訪問。 3. 調用主版頁面方法。 主版頁面中定義的公用方法可以通過Master直接調用。 4. 主版頁面中調用內容頁的方法。 主版頁面中定義委託: public delegate void ElementSelectedChangeHandler(); 主版頁面中執行個體化委託(又是一個屬性): public ElementSelectedChangeHandler ElementSelectedChange { private get; set; } 在主版頁面中需要的地方調用委託: if (ElementSelectedChange != null) { ElementSelectedChange(); } 內容頁中指定一個與委託簽名匹配的方法: Master.ElementSelectedChange = this.ElementSelectedChange; 5. Master頁的AutoEventWireup屬性一定要設定為"true",才會自動觸發Master頁中控制項的所有事件。 今天突然遇到一個問題就是如何擷取使用者自訂控制項裡面的子控制項的問題! 去Google了一下。。嘿嘿找到結果了。。記錄下來! 頁面代碼如下: Panel Login = (Panel)this.RightCommen1.FindControl("PanelLogin"); Panel PanelHot = (Panel)this.RightCommen1.FindControl("PanelHot"); Panel PanelSchool = (Panel)this.RightCommen1.FindControl("PanelSchool"); Panel PanelTea = (Panel)this.RightCommen1.FindControl("PanelTea"); Panel PanelHuiSuo = (Panel)this.RightCommen1.FindControl("PanelHuiSuo"); Panel PanelEnd = (Panel)this.RightCommen1.FindControl("PanelEnd"); PanelSchool.Visible = true; PanelHuiSuo.Visible = false; PanelEnd.Visible = false; 嘿嘿通過FindControl方法解決問題!但是要注意轉型的問題! |