2009-06-04 6 views
2

Is MasterPage -> Страница -> UserControl порядок загрузки запроса ASP.NET?
Есть ли ситуация, когда UserControl загружает до загрузки страницы?ASP.NET: при загрузке UserControls?

У меня есть личные сообщения для моих пользователей, и на каждой странице они увидят сообщение типа «У вас есть 3 непрочитанных сообщения».
Когда пользователи просматривают непрочитанное сообщение, я хочу изменить сообщение на это «У вас есть 2 непрочитанных сообщения».

Это легко сделать с помощью Request.Redirect, но я хочу этого избежать.
сообщение 1 -> нажмите на него будет переходит к MarkAsRead.aspx ID = х перенаправляет которым я ViewMessage.aspx идентификатор = х

Вместо того, чтобы делать это, я хочу, чтобы пометить сообщение как прочтенное от ViewMessage.aspx? ? id = x, то уменьшите мою переменную сеанса «unreadMessages», а затем пусть мой UserControl отобразит новый номер.

Но я обеспокоен тем, что UserControls может не всегда загружаться последним.

ответ

13

Прогрессирование событий в ASP.NET выглядит следующим образом:

Page.OnPreInit() 
UserControl.OnInit() 
MasterPage.OnInit() 
Page.OnInit() 
Page.OnInitComplete() 
Page.OnLoad() 
MasterPage.OnLoad() 
UserControl.OnLoad() 
Page.OnLoadComplete() 
(page event handlers fired here) 
Page.OnPreRender() 
MasterPage.OnPreRender() 
UserControl.OnPreRender() 
Page.OnPreRenderComplete() 
Page.OnSaveStateComplete() 
UserControl.OnUnload() 
MasterPage.OnUnload() 
Page.OnUnload() 

Чтобы сделать то, что вы пытаетесь сделать, обрабатывать ваши сообщения счета обновления в вашем случае Page.Init, а затем отобразить этот счет во время UserControl. Загрузить событие. Я представил полный ход событий выше, что может предоставить вам больше возможностей в случае, если вышеупомянутый сценарий не является адекватным. (Например, вы можете обновить счетчик в Page.Load и отобразить его в UserControl.PreRender, если по какой-то причине Page.Init было слишком рано.)

0

check this diagram для заказа события asp.net.

мое предложение: реализовать public void UpdateInfo() в UserControl, который вызывается из события OnLoad() UserControl и из события OnLoad() в ViewMessage.aspx после того, как он настраивает счетчик для непрочитанных сообщений.

+0

Ваше предложение верное, но у меня нет доступа к моему UserControl, это отдельный элемент управления, загруженный где-то на странице, которая принимает количество сообщений из переменной сеанса –

+0

Связанная страница больше не существует. – skolima

0

Я согласен с приведенным выше ответом - это может стать очень сложным, когда вы полагаетесь на события загрузки пользовательского элемента управления. Подумайте, как работают все средства управления базой данных MS - вам нужно передать их Bind, прежде чем они будут выполнять свою функцию.

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