2012-06-14 4 views
0

Для моей установки требуется 2 уровня главной страницы, потому что я загружаю данные в Master Master, который совместно используется в моем приложении с различными вложенными мастерами.Как загрузить в порядке Master Master-> Nested Master-> Page

Итак, сейчас мне нужен мастер-мастер, чтобы сначала загрузить мои данные, а затем загрузить материал в Nested Master, а затем загрузить материал в страницу.

Когда я был только один уровень мастера, я установка порядка моя нагрузка, как так:

  1. Уплотненный Master - Init
  2. Page - Load

Теперь у меня есть дополнительный уровень мастера, как я могу загрузить в следующем порядке?

  1. Мастер Мастер -?
  2. Вложенный мастер -?
  3. Страница -?

Это проблема, потому что ASP.NET почему-то сначала загружает внутренний уровень. Итак, скажем, предоставляя ту же самую функцию, ASP.NET будет вызывать в порядке Page-> Nested-> Master вместо того, что имеет смысл: Master-> Nested-> Page. Который в моем личном мнении полностью побеждает цель иметь систему главной страницы.

ответ

1

Короткий ответ PreRender, но похоже, что вы могли бы извлечь выгоду из перемещения некоторой логики наших основных страниц и бизнес-объектов/классов? Наличие разных главных страниц в зависимости друг от друга, вероятно, не самая лучшая идея. Если вам нужны данные, которые можно получить глобально, загрузите их в бизнес-классе и приложите кэш-память, когда-то созданный для любого долгого времени (если только для запроса используйте HttpContext.Items).

Если вам нужно придерживаться этой настройки, у вас также есть возможность вызова иерархии главной страницы - поэтому ваш главный мастер (верхний уровень) может сделать доступными опции/данные OnInit. Все остальное, что нужно это может затем вызвать - вот метод, который петлями все MasterPages в любых заданных страницах иерархии и вернуть первый экземпляр требуемого типа:

/// <summary> 
/// Iterates the (potentially) nested masterpage structure, looking for the specified type. 
/// </summary> 
/// <typeparam name="T"></typeparam> 
/// <param name="currentMaster">The current master.</param> 
/// <returns>Masterpage cast to specified type or null if not found.</returns> 
public static T GetMasterPageOfType<T>(MasterPage currentMaster) where T : MasterPage 
{ 
    T typedRtn = null; 
    while (currentMaster != null) 
    { 
     typedRtn = currentMaster as T; 
     if (typedRtn != null) 
     { 
      return typedRtn; //End here 
     } 

     currentMaster = currentMaster.Master; //One level up for next iteration 
    } 

    return null; 
} 

использовать:

Helpers.GetMasterPageOfType<GlobalMaster>(this.Master); 
+0

Стараюсь используйте пример кода, но this.Master имеет значение null в функции Page_Init. Есть идеи? – Bill

+0

Хорошо, я понял. – Bill

Смежные вопросы