2011-11-17 39 views
0

谷歌搜索後,我發現從一個用戶控件調用一個母版頁功能的一種方法:從用戶控件調用母版頁功能?

  1. 創建包含方法的接口。
  2. 實現主頁面中的接口
  3. 從您的控件中,通過接口類型引用this.Page.Master。
  4. 打電話給你的方法。

這是一個很好的方法,但我不知道我可以用這種方式調用主頁面靜態函數。

另一種方法是:

// this is also good. 
((MyMaster)this.Page.Master).MyFunction(); 

但我聽說,這也可以通過一個事件來完成。

1)有人能告訴我如何通過事件從用戶控件調用主頁面功能嗎? 2)另外,我如何通過上面解釋的通用接口方式來調用主頁面靜態函數。

+1

爲什麼在主頁面中有靜態方法? –

回答

1

在您的內容頁面中,使用MasterType指令生成主類型。然後,您可以在內容頁面中使用公開的主屬性,而無需投射。如果你想調用靜態函數從內容的高手,你需要使用主代碼隱藏類的名稱(因爲它是靜態的)

內容頁面調用它:

<%@ Page MasterPageFile="~/dir1/master1.master" ....... %> 
<%@ MasterType VirtualPath="~/dir1/master1.master" %> <!--This technique might change between .net versions. This is testing on 3.5--> 

content page.cs

this.Master.nonStaticFunc(); 
dir1_master1.staticFunc(); 
3

我認爲讓用戶控件引發事件並讓頁面監聽事件然後調用主頁面函數會更好。控件不應該知道實現它們的東西 - 包括頁面是否有母版頁。

+0

這是一篇關於如何從用戶控件中引發事件的文章:http://codebetter.com/brendantompkins/2004/10/06/easily-raise-events-from-asp-net-ascx-user-controls/ – adam0101

相關問題