Юзер-контролы и порядок вызова Page_Init и Page_Load
От: Аноним  
Дата: 31.07.05 15:20
Оценка:
На страницу брошен UC. Для страницы есть обработчики Page_Init и Page_Load. И для контрола тоже есть Page_Init и Page_Load. В каком порядке вызываются все эти 4 функции? В смысле в каком ДОЛЖНЫ вызываться. Я в МСДНе найти на это прямого ответа не смог. Может кто-нибудь подсказать ответ?
Юзер-контролы и порядок вызова Page_Init и Page_Load
От: Аноним  
Дата: 31.07.05 15:38
Оценка:
To give you an example of the execution sequence, here is the sequence from a page with one button and one user control that contains one button. The example shows the execution list after the user has clicked the button on the user control:

WebUserControl1_Init
WebForm1_Init
Page_Load
Page Button1_Load
WebUserControl1_Page_Load
UC1 Button1_Load
UC1 Button1_Click
WebForm1_PreRender
Page Button1_PreRender
WebUserControl1_PreRender
UC1 Button1_PreRender

http://blog.daveranck.com/archive/2004/07/19/217.aspx


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Юзер-контролы и порядок вызова Page_Init и Page_Load
От: mogadanez Чехия  
Дата: 01.08.05 07:03
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>На страницу брошен UC. Для страницы есть обработчики Page_Init и Page_Load. И для контрола тоже есть Page_Init и Page_Load. В каком порядке вызываются все эти 4 функции? В смысле в каком ДОЛЖНЫ вызываться. Я в МСДНе найти на это прямого ответа не смог. Может кто-нибудь подсказать ответ?


для Init сначала дети, потом сам

для OnLoad наоборот, сначала сам, потом дети.

причем это справедливо не только для отношения Page -> Control но и для любых контролов на любом уровне вложенности.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Re[2]: Юзер-контролы и порядок вызова Page_Init и Page_Load
От: Аноним  
Дата: 01.08.05 07:34
Оценка:
Здравствуйте, mogadanez, Вы писали:

M>Здравствуйте, <Аноним>, Вы писали:


А>>На страницу брошен UC. Для страницы есть обработчики Page_Init и Page_Load. И для контрола тоже есть Page_Init и Page_Load. В каком порядке вызываются все эти 4 функции? В смысле в каком ДОЛЖНЫ вызываться. Я в МСДНе найти на это прямого ответа не смог. Может кто-нибудь подсказать ответ?


M>для Init сначала дети, потом сам


M>для OnLoad наоборот, сначала сам, потом дети.


M>причем это справедливо не только для отношения Page -> Control но и для любых контролов на любом уровне вложенности.


А где про это официально написано?
Re[3]: Юзер-контролы и порядок вызова Page_Init и Page_Load
От: mogadanez Чехия  
Дата: 01.08.05 08:01
Оценка: 12 (1)
Здравствуйте, <Аноним>, Вы писали:


M>>причем это справедливо не только для отношения Page -> Control но и для любых контролов на любом уровне вложенности.


А>А где про это официально написано?


не видел нигде прямого подтверждения кроме самого кода ASP.NET

только косвенные фразы по которым можно строить умозаключения

[Init Event]
Remarks
Server controls should perform any initialization steps that are required to create and set up an instance. You cannot use view-state information within this event; it is not populated yet. You should not access another server control during this event, regardless of whether it is a child or parent to this control. Other server controls are not certain to be created and ready for access.


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


[Load Event]
Remarks
Notifies the server control to perform any processing steps that are set to occur on each page request. You can acess view state information and form POST data from this event. You can also access other server controls within the page's control hierarchy.


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



Reflector показывает:

 private void ProcessRequestMain()
{
      try
      {
            if (this.IsInAspCompatMode)
            {
                  AspCompatApplicationStep.OnPageStartSessionObjects();
            }
            this._requestValueCollection = this.DeterminePostBackMode();
            HttpContext context1 = this.Context;          
            base.InitRecursive(null);           
            if (this.IsPostBack)
            {            
                  this.LoadPageViewState();                
                  this.ProcessPostData(this._requestValueCollection, true);                
            }
            base.LoadRecursive();
....

}



internal void InitRecursive(Control namingContainer)
{
      if (this._controls != null)
      {
            if (this.flags[0x80])
            {
                  namingContainer = this;
            }
            string text1 = this._controls.SetCollectionReadOnly("Parent_collections_readonly");
            int num1 = this._controls.Count;
            for (int num2 = 0; num2 < num1; num2++)
            {
                  Control control1 = this._controls[num2];
                  control1._namingContainer = namingContainer;
                  if (((namingContainer != null) && (control1._id == null)) && !control1.flags[0x40])
                  {
                        control1.GenerateAutomaticID();
                  }
                  control1._page = this._page;
                  control1.InitRecursive(namingContainer); // рекурсивный  вызов для детей... 
            }
            this._controls.SetCollectionReadOnly(text1);
      }
      if (this._controlState < ControlState.Initialized)
      {
            this._controlState = ControlState.ChildrenInitialized;
            this.OnInit(EventArgs.Empty); // а теперь для себя родного
            this._controlState = ControlState.Initialized;
      }
      this.TrackViewState();
}

internal void LoadRecursive()
{
      if (this._controlState < ControlState.Loaded)
      {
            this.OnLoad(EventArgs.Empty); // Для себя
      }
      if (this._controls != null)
      {
            string text1 = this._controls.SetCollectionReadOnly("Parent_collections_readonly");
            int num1 = this._controls.Count;
            for (int num2 = 0; num2 < num1; num2++)
            {
                  this._controls[num2].LoadRecursive();//  и только щас для детей 
            }
            this._controls.SetCollectionReadOnly(text1);
      }
      if (this._controlState < ControlState.Loaded)
      {
            this._controlState = ControlState.Loaded;
      }
}
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Re[4]: Юзер-контролы и порядок вызова Page_Init и Page_Load
От: Аноним  
Дата: 01.08.05 08:18
Оценка:
Хорошо, тогда вопрос становится таким. Какой метод у страницы-хостера контрола вызывется гарантированно раньше каких-либо методов-обработчиков событий контролов на ней?

Мне надо в моем юзер-контроле проинициализировать DropDownList, содержащийся в нем. ViewState я не использую, хочу все в run-time подгружать самому.
Re[5]: Юзер-контролы и порядок вызова Page_Init и Page_Load
От: Gollum Россия  
Дата: 01.08.05 13:32
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Хорошо, тогда вопрос становится таким. Какой метод у страницы-хостера контрола вызывется гарантированно раньше каких-либо методов-обработчиков событий контролов на ней?


А>Мне надо в моем юзер-контроле проинициализировать DropDownList, содержащийся в нем. ViewState я не использую, хочу все в run-time подгружать самому.


override protected void OnInit(EventArgs e) ?
И начальник заставы поймет меня, и беспечный рыбак простит
Eugene Agafonov on the .NET

Re[6]: Юзер-контролы и порядок вызова Page_Init и Page_Load
От: Аноним  
Дата: 02.08.05 07:22
Оценка:
Здравствуйте, Gollum, Вы писали:

G>Здравствуйте, <Аноним>, Вы писали:


А>>Хорошо, тогда вопрос становится таким. Какой метод у страницы-хостера контрола вызывется гарантированно раньше каких-либо методов-обработчиков событий контролов на ней?


А>>Мне надо в моем юзер-контроле проинициализировать DropDownList, содержащийся в нем. ViewState я не использую, хочу все в run-time подгружать самому.


G>override protected void OnInit(EventArgs e) ?


Так тут же писали, что сперва вызывается событие OnInit для дочерних контролов, потом для самой страницы.
Re[7]: Юзер-контролы и порядок вызова Page_Init и Page_Load
От: Gollum Россия  
Дата: 02.08.05 07:29
Оценка:
Здравствуйте, <Аноним>, Вы писали:

G>>override protected void OnInit(EventArgs e) ?


А>Так тут же писали, что сперва вызывается событие OnInit для дочерних контролов, потом для самой страницы.


А это не событие. Тут как раз все обработчики подключаются.
В лучших книгах всегда нет имен, и в лучших картинах — лиц
Eugene Agafonov on the .NET

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.