我有一个使用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
答案 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之后的所有页面。