2009-06-04 37 views
2

是MASTERPage - > Page - > UserControl ASPNET請求的加載順序?
是否存在UserControl在頁面加載之前加載的情況?ASP .NET:何時加載UserControls?

我有我的用戶,並在每一頁,他們會看到這樣一條消息悄悄話「你有3個未讀郵件」。
當用戶查看未讀消息,我想消息改變這種「你有2個未讀郵件」。

這可以用Request.Redirect很容易做到,但我想避免這種情況。
消息1 - >點擊它就會進入MarkAsRead.aspx ID = X至極重定向我ViewMessage.aspx ID = X

而不是做這個的我想將郵件標記爲從ViewMessage.aspx讀? ?id = x然後減少我的Session變量「unreadMessages」,然後讓我的UserControl顯示新的數字。

但我擔心的是,用戶控件可能不總是加載最後。

回答

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事件,那麼該用戶控件中顯示計數。加載事件。我已經提供了上述事件的全部進展,這可以爲您提供更多選擇,以防上述情況不適用。 (例如,您可以更新Page.Load中的計數,並將其呈現在UserControl.PreRender中,如果由於某種原因Page.Init太快)。

0

檢查this diagram是否爲asp.net事件順序。

我的建議:在您的UserControl中實現一個公共無效的UpdateInfo(),它在調整未讀消息的計數器後,從UserControl的OnLoad()事件和ViewMessage.aspx中的OnLoad()事件中調用。

+0

你的建議是正確的,但我沒有訪問我的用戶,它是採取郵件數從會話變量 – 2009-06-04 10:02:46

0

我將與上述答案達成一致 - 當你依靠孩子的用戶控件加載事件它可以變得非常棘手。考慮所有的MS數據綁定控件是如何工作的 - 你需要告訴他們綁定,然後才能執行它們的功能。