2009-05-20 46 views
1

叫我有一個公共的方法在我的內容頁面類,我想打電話從母版頁類這種方法
感謝內容頁面類的方法從母版頁類

+0

如果將cphAdmin.Page作爲BasePage執行,則如果轉換不成功,則不會拋出NullReferenceException。它會靜默地返回null。所以你實際上必須做 - BasePage page = cphAdmin.Page as BasePage); if(null!= page)<在這裏做你的東西>。如果轉換不成功,直接轉換運算符將拋出NullReferenceException。 – Kirtan 2009-05-22 10:46:52

+0

你也可以看看這個 - http://gen5.info/q/2008/06/13/prefix-casting-versus-as-casting-in-c/ – Kirtan 2009-05-22 10:49:36

回答

6

您可以從一個基類繼承你的頁面。然後你可以在你的基類中創建一個虛擬方法,這個方法會在你的頁面中被覆蓋。然後,您甚至可以從母版頁的虛擬方法是這樣 -

(cphPage.Page as PageBase).YourMethod(); 

這裏,cphPage是的ContentPlaceHolder在母版頁的ID。 PageBase是包含YourMethod方法的基類。

編輯:當然,您必須在使用頁面實例調用方法之前進行空檢查。

+0

Excellant的想法! 我已經擁有了一個由頁面繼承的基類,所以立即解決了這個問題。 – 2009-05-20 10:51:26

3

,如果你不希望使用任何基礎頁面

添加到您的母版頁,

private object callContentFunction(string methodName, params object[] parameters) 
{ 
    Type contentType = this.Page.GetType(); 
    System.Reflection.MethodInfo mi = contentType.GetMethod(methodName); 
    if(mi == null)return null; 
    return mi.Invoke(this.Page, parameters); 
} 

然後用它

callContentFunction( 「myPublicMethodName」,myParam1,myParam2 .. );

2

步驟:

  1. 添加新<%@ MasterType VirtualPath="location of your masterpage" %>指令.aspx頁面中

  2. 在母版頁中聲明瞭一個公共職能。

  3. 使用Master.functionName()從內容頁面調用該功能。

相關問題