Почему при обратной передаче порядок OnLoad / CreateChildControls изменяется? - PullRequest
9 голосов
/ 30 октября 2009

Жизненный цикл веб-части описан следующим образом:

На странице загрузки

  1. Конструктор
  2. OnInit
  3. OnLoad
  4. Метод ConnectionConsumer вызывается, если веб-часть подключаема
  5. CreateChildControls ...

При 1-й обратной передаче (обработчик щелчка PostBack устанавливает ViewState через публичное свойство)

  1. Конструктор
  2. OnInit
  3. CreateChildControls
  4. OnLoad
  5. Обработка кликов PostBack ...

При 2-й обратной передаче (обработчик щелчка PostBack устанавливает ViewState через публичное свойство)

  1. Конструктор
  2. OnInit
  3. LoadViewState
  4. CreateChildControls
  5. OnLoad ...

Как вы можете видеть, OnLoad и CreateChildControls меняют свой порядок.Это создает некоторые трудности в моем коде, так как мне нужно собирать различные данные, которые я использовал для элемента OnLoad.

Есть ли какая-то причина, по которой заказ изменяется на этапе обратной отправки?

Ответы [ 2 ]

14 голосов
/ 09 декабря 2009

CreateChildControls вызывается всякий раз, когда каркас (или вы сами) вызывает метод EnsureChildControls. Этот метод следует вызывать всякий раз, когда вам нужны дочерние элементы управления.

В случае платформы она хочет установить опубликованные значения между OnInit и OnLoad (чтобы вы могли получить доступ к значениям во время OnLoad). Поскольку для этого нужны элементы управления, он вызовет для вас EnsureChildControls.

Если нет обратной передачи, также нет необходимости устанавливать значения, и, таким образом, вызов EnsureChildControls будет ждать до тех пор, пока каркас не будет нуждаться в элементах управления. Это происходит между OnLoad и OnPreRender.

0 голосов
/ 30 октября 2009

Этого не должно быть, ты абсолютно уверен? Не запущены ли другие потоки, которые могли бы создать впечатление, что порядок изменился?

В конце концов, это всего лишь ASP.NET, программа, выполняемая компьютером (то есть она всегда должна делать то же самое, в отличие от человека).

...