簡體   English   中英

從基類訪問不同的主頁

[英]Accessing different Masterpages from Base Class

我有一個使用2個母版頁的應用程序。 一個用於主頁面,一個用於彈出頁面。 這些都繼承自Masterpages

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指令,我可以在內容頁面中調用正確的Master方法。 但我不想從內容中將其稱為常用方法,因此我需要在基礎中使用它。

所以有人知道如何處理這個問題。 我正在考慮再次為PopupBasePage派生BasePage,然后編寫GetCurrentUserFromMasterPage()以強制轉換為彈出主控。 或者我將一些東西傳遞給BasePage構造函數,告訴它要轉換為什么。

因為我有很多網頁,所以我希望將對我所有網頁的影響保持在最低限度。

謝謝M.

您可以插入一個額外的MasterPage作為當前2個的基類:

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

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

public partial class PopupMasterPage : SiteMasterPage
{
}

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

這對你有意義嗎?

使用反射:

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

做這個 :-

    public class MasterPageBase : MasterPage
    {

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

    }

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

繼承自PageBase之后的所有頁面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM