将母版页对象传递到嵌套的母版页
Pass down master page object to nested master page
抱歉,如果这太琐碎了,但我似乎 运行 遇到无法从嵌套母版页访问对象的问题。
我无法将 User 对象从我的主要母版传递到我的嵌套母版。当它到达我的嵌套母版页时,它为空。我不记得让母版页说话有问题,但在这种情况下它只是不想工作。
如此设置,部分代码省略:
public partial class RWCMSMain : System.Web.UI.MasterPage
{
public Business.BusinessEntities.User LoggedOnUser { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
//Get the user
var loggedOnUser = userRepo.GetUser(securityToken);
//Now set the property
this.LoggedOnUser = loggedOnUser;
}
}
如果我要从继承主母版的内容页面访问它,一切都很好,但我的想法是拥有一个包含侧边栏的母版页。
现在我的side.master继承自主要主人:
public partial class RWCMSSide : System.Web.UI.MasterPage
{
//Create property for nested master
public Business.BusinessEntities.User LoggedOnUser { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
//Assign main masters user to the new property
//Master.LoggedOnUser is always null
this.LoggedOnUser = Master.LoggedOnUser;
}
}
您可能会争辩说我可以在嵌套的母版页上重新创建用户,但是当它可以作为一个完成时,这将对数据库产生两次点击。
调试主master时用户存在,就是不传下去
如有指点,将不胜感激!
此致,
问题
Master 的 Load
被执行 after Child 的 Load
:
- ...
- Master page Init event.
- Content page Init event.
- Content page Load event.
- Master page Load event.
- Master page controls Load event.
- ...
这就是 属性 为空的原因。
解决方案
1. 您可以在 Init
事件中设置它 - protected void Page_Load(object sender, EventArgs e)...
如果它不依赖于正在加载的页面(因为它可能是).
2. 或者你可以把 属性 变成懒惰的 属性(如果不是,则不需要实际的 Lazy<T>
(它可能不应该)用于多线程代码):
public partial class RWCMSMain : System.Web.UI.MasterPage
{
private Business.BusinessEntities.User m_LoggedOnUse;
public Business.BusinessEntities.User LoggedOnUser
{
get
{
if (this.m_LoggedOnUse == null)
this.m_LoggedOnUse = userRepo.GetUser(securityToken);
return this.m_LoggedOnUse;
}
}
protected void Page_Load(object sender, EventArgs e)
{
}
}
抱歉,如果这太琐碎了,但我似乎 运行 遇到无法从嵌套母版页访问对象的问题。
我无法将 User 对象从我的主要母版传递到我的嵌套母版。当它到达我的嵌套母版页时,它为空。我不记得让母版页说话有问题,但在这种情况下它只是不想工作。
如此设置,部分代码省略:
public partial class RWCMSMain : System.Web.UI.MasterPage
{
public Business.BusinessEntities.User LoggedOnUser { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
//Get the user
var loggedOnUser = userRepo.GetUser(securityToken);
//Now set the property
this.LoggedOnUser = loggedOnUser;
}
}
如果我要从继承主母版的内容页面访问它,一切都很好,但我的想法是拥有一个包含侧边栏的母版页。
现在我的side.master继承自主要主人:
public partial class RWCMSSide : System.Web.UI.MasterPage
{
//Create property for nested master
public Business.BusinessEntities.User LoggedOnUser { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
//Assign main masters user to the new property
//Master.LoggedOnUser is always null
this.LoggedOnUser = Master.LoggedOnUser;
}
}
您可能会争辩说我可以在嵌套的母版页上重新创建用户,但是当它可以作为一个完成时,这将对数据库产生两次点击。
调试主master时用户存在,就是不传下去
如有指点,将不胜感激!
此致,
问题
Master 的 Load
被执行 after Child 的 Load
:
- ...
- Master page Init event.
- Content page Init event.
- Content page Load event.
- Master page Load event.
- Master page controls Load event.
- ...
这就是 属性 为空的原因。
解决方案
1. 您可以在 Init
事件中设置它 - protected void Page_Load(object sender, EventArgs e)...
如果它不依赖于正在加载的页面(因为它可能是).
2. 或者你可以把 属性 变成懒惰的 属性(如果不是,则不需要实际的 Lazy<T>
(它可能不应该)用于多线程代码):
public partial class RWCMSMain : System.Web.UI.MasterPage
{
private Business.BusinessEntities.User m_LoggedOnUse;
public Business.BusinessEntities.User LoggedOnUser
{
get
{
if (this.m_LoggedOnUse == null)
this.m_LoggedOnUse = userRepo.GetUser(securityToken);
return this.m_LoggedOnUse;
}
}
protected void Page_Load(object sender, EventArgs e)
{
}
}