Ответ 1
Page_LoadComplete
- это событие, которое возникает после загрузки всех элементов управления
Помните, что событие Init
сначала запускается всеми дочерними элементами управления, и только когда все элементы управления были инициализированы, событие Init
страницы поднято. Событие Load
работает наоборот, страница сначала вызывает событие Load
, а затем каждый дочерний элемент управления вызывает свое собственное событие Load
. В конце появляется LoadComplete
. Обратите внимание, что это верно только тогда, когда элементы управления создаются во время разработки, когда элементы управления создаются динамически, они (к сожалению) не строго придерживаются этого подхода.
Из MSDN:
Если элементы управления создаются динамически во время выполнения или декларативно в шаблонах элементов управления, привязанных к данным, их события изначально не синхронизируются с элементами других элементов управления на странице. Например, для элемента управления, который добавляется во время выполнения, события Init и Load могут происходить намного позже в жизненном цикле страницы, чем те же события для элементов управления, созданных декларативно. Поэтому с момента их создания динамически добавленные элементы управления и элементы управления в шаблонах поднимают свои события один за другим до тех пор, пока они не поймают событие, в течение которого оно было добавлено в коллекцию Controls.
Посмотрите:
(источник: http://msdn.microsoft.com/en-us/library/ms178472.aspx)
Изменить 1
Чтобы выполнить все ваши требования:
Мне нужен способ запуска кода после того, как все события Page_Load запущены, но до того, как были запущены события postback (например, события Click):
Я думаю, что самый простой способ - объявить пользовательское событие в User Control и запустить его после загрузки элемента управления, а затем подписаться на это событие в ASPX
Пользовательский контроль
public event Action LoadCompleted = delegate { };
protected void Page_Load(object sender, EventArgs e)
{
this.LoadCompleted();
}
страница ASPX
protected void Page_Load(object sender, EventArgs e)
{
this.myUserControl.LoadCompleted += () =>
{
// do somethign interesting
this.lblMessage.Text = DateTime.Now.ToString();
};
}