0

我有一个使用 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;
    }
 }

到目前为止,一切都很好。所以我的内容页面都继承自一个基类。基类有一个从基类调用 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 构造函数以告诉它要转换为什么。

因为我有很多网页,所以我想将对我所有网页的影响保持在最低限度。

谢谢米

4

3 回答 3

2

您可以插入一个额外的 MasterPage 作为您当前 2 个的基类:

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

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

public partial class PopupMasterPage : SiteMasterPage
{
}

这也将允许您在一个地方实现其他常见功能和标记(包括 CSS 文件)。

于 2013-07-23T08:30:05.877 回答
0

对你有意义吗

使用反射:

Master.GetType().GetMethod("GetCurrentUser").Invoke();
于 2013-07-23T08:29:17.510 回答
0

做这个 :-

    public class MasterPageBase : MasterPage
    {

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

    }

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

从 PageBase 继承后的所有页面。

于 2013-07-23T09:48:35.663 回答