[英]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.