从基类访问不同的主页

时间:2013-07-23 08:02:17

标签: c# asp.net master-pages

我有一个使用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个母版页,所有网页都是从Base派生的 页面..我需要能够投射到正确的主人。

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构造函数,告诉它要转换为什么。

我希望将我所有网页的影响保持在minium上,因为我有很多网页。

谢谢M

3 个答案:

答案 0 :(得分:2)

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

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

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

public partial class PopupMasterPage : SiteMasterPage
{
}

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

答案 1 :(得分:0)

对你有用吗<​​/ p>

使用反射:

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

答案 2 :(得分:0)

这样做: -

    public class MasterPageBase : MasterPage
    {

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

    }

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

继承自PageBase之后的所有页面。