Давайте пройдемся по тому, что здесь произошло. Вы создали экземпляр business.Pages.Page
, что означает, что вызывается конструктор класса страницы. Затем вы добавили элемент управления в коллекцию Controls
. Затем вы вызвали метод RenderControl()
на этой странице.
Нигде в этом процессе вы не инициировали жизненный цикл запроса для страницы. Как могут OnInit
, OnLoad
и т. Д. Страницы срабатывать, если вы не вызываете какой-либо метод, который их запускает? Во время обычной загрузки страницы страница имеет значение HttpHandler
, и конвейер запросов запускает каждое событие, которое, в свою очередь, проходит через дерево элементов управления страницы, вызывая каждый дочерний элемент управления.
Внутренне это делается путем вызова System.Web.UI.Page.ProcessRequest()
, который вы, вероятно, могли бы вызвать с помощью отражения, но могут иметь некоторые непредсказуемые результаты.
Здесь следует помнить, что эти классы управления страницами и пользователями не являются специальными - они работают так же, как и любой другой класс. Если вы их new()
запустите, конструктор сработает. Если вы вызываете RenderControl()
, этот метод срабатывает. Ничего больше, чем это!