Передайте объект главной страницы на вложенную главную страницу

1

Извините, если это слишком тривиально, но у меня, похоже, возникает проблема, когда я не могу получить доступ к объекту из вложенной главной страницы.

У меня возникли проблемы с передачей объекта 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;
    }
}

Вы можете утверждать, что я мог бы воссоздать пользователя на вложенной главной странице, но затем это создало бы два обращения к базе данных, когда это можно было бы сделать как одно.

При отладке главного мастера пользователь существует, он просто не передается.

Любые указатели будут очень благодарны!

С Уважением,

Теги:
webforms

1 ответ

0
Лучший ответ

проблема

Магистральная Load выполняется после Load ребенка:

  • ...
  • Событие инициации главной страницы.
  • Событие Init страницы содержимого.
  • Содержимое страницы Загрузка события.
  • Основная страница Загрузка события.
  • Управление главной страницей.
  • ...

Вот почему свойство равно null.

Решение

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)
    {
    }
}
  • 0
    Хорошая находка. Я не знаю, как я это пропустил. Я был зациклен на коде, это сам. Просто нужно найти работу вокруг. Я посмотрю в жизненный цикл. Отличная работа!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню