将母版页对象传递给嵌套母版页

时间:2015-03-25 19:49:44

标签: c# webforms

道歉,如果这太微不足道了,但我似乎遇到了无法从嵌套母版页访问对象的问题。

我无法将User对象从主master传递给嵌套的master。当它到达我的嵌套母版页时,它为空。我永远不会记得在掌握母版页面时遇到麻烦,但在这种情况下它只是不想工作。

所以设置,有些代码省略:

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;
    }
}

您可能会争辩说我可以在嵌套母版页上重新创建用户,但是当它可以作为一个页面完成时,它会为数据库创建两个匹配。

虽然调试主要用户存在,但它不会被传递下去。

任何指针都将非常感谢!

此致

1 个答案:

答案 0 :(得分:0)

问题

主人Load被执行after孩子的Load

  
      
  • ...
  •   
  • 母版页初始化事件。
  •   
  • 内容页面初始化事件。
  •   
  • 内容页面加载事件。
  •   
  • 母版页加载事件。
  •   
  • 主页面控制加载事件。
  •   
  • ...
  •   

这就是该属性为空的原因。

解决方案

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)
    {
    }
}