2013-07-23 90 views
0

我有一個使用2個母版頁的應用程序。一個用於主頁面和一個用於彈出頁面。這些都是從主頁繼承從基類訪問不同的主頁

public partial class MainMasterPage : System.Web.UI.MasterPage 
{ 

    UserBO objUser = null; 

    public UserBO GetCurrentUser() 
    { 
     UserBO userBO = new UserBO(); 
    ..... 
    ..... 
     return userBO; 
    } 
} 


public partial class PopupMasterPage : System.Web.UI.MasterPage 
{ 

    UserBO objUser = null; 

    public UserBO GetCurrentUser() 
    { 
     UserBO userBO = new UserBO(); 
    ..... 
    ..... 
     return userBO; 
    } 
} 

到目前爲止好。所以我的內容頁面全部從基類繼承。基類有一個方法, 從Base類調用GetCurrentUser。

public class BasePage : Page 
{ 
//..... 
    protected UserBO GetCurrentUserFromMasterPage() 
    { 
     this.Master 
     Elsa.MasterPages.MainMasterPage master = (Elsa.MasterPages.MainMasterPage)this.Master; 
     return master.GetCurrentUser(); 
    } 
} 

所以在這裏你可以看到基本頁面鑄MasterPage,然後調用GetCurrentUser

只是爲了背景...主頁面獲取當前用戶登錄到系統,然後使用信息繪製自己。如果用戶在會話中,它會得到它,否則它會從數據庫中加載。我不希望內容頁面做同樣的事情,所以我希望基本頁面始終從主頁獲取內容頁面的當前用戶。

但是,我的問題是,因爲有2個母版頁,所有的網頁都從基地 頁面派生..我需要能夠投給正確的主人。

public partial class MyMainPage : Elsa.Pages.BasePage 
{ 
    private long _userId = -1; 

public partial class MyPopupPage : Elsa.Pages.BasePage 
{ 
    private long _userId = -1; 

如果我放入MasterType指令,我可以調用正確的主內容頁面中的方法。 但我不想從內容中調用它作爲它的常用方法,所以我需要它在基礎中。

所以沒有人知道如何處理這個問題。我正在考慮再次爲PopupBasePage派生BasePage,並編寫GetCurrentUserFromMasterPage()以將其轉換爲彈出主文件。 或者我將一些東西傳遞給BasePage構造函數,告訴它要投射什麼內容。

因爲我有很多的網頁,我想保持對我所有網頁的影響。

由於中號

回答

2

您可以插入一個額外的母版作爲基類的2分電流的:

public partial class SiteMasterPage : System.Web.UI.MasterPage 
{ 
    .... 
    // GetCurrentUser 
} 

public partial class MainMasterPage : SiteMasterPage 
{ 
    .... 
} 

public partial class PopupMasterPage : SiteMasterPage 
{ 
} 

這將允許您實現其他常見功能和標記(包括CSS文件)在一個地方。繼承PageBase後

public class MasterPageBase : MasterPage 
    { 

    public PageBase PageBase { get { return (PageBase)this.Page; } } 

    } 

    public class PageBase : Page 
    { 
     // Do your Extensions Here.. 
    } 

所有頁面有 - :

+0

亨克,這實際上是我正在看,這一刻。所以我會在SiteMasterPage中實現GetCurrentUser,然後在每個派生母版頁中處理頁面加載等。這是否正確。情況就是這樣..我的基類然後將主頁面投到SiteMasterPage ..謝謝米克 – Doiremik

+0

是的,你投到你需要的類型。 –

+0

好酷...只是給它一個旋轉現在Henk – Doiremik

0

是否有意義,你

使用反射爲:

Master.GetType().GetMethod("GetCurrentUser").Invoke(); 
+0

不是一個壞建議阿布舍克,但我寧願不使用反思。我認爲將主頁面作爲參考傳遞給基頁面或派生基頁面並覆蓋PopupMaster的方法會更好。只是想看看這是不錯的編程練習,或者如果別人有其他更好的作品 – Doiremik

0

執行此操作。