是MasterPage - >页面 - > UserControl ASP .NET请求的加载顺序?
是否存在UserControl在Page加载之前加载的情况?
我为我的用户提供私信,在每个页面中他们都会看到这样的消息“你有3条未读消息”。
当用户查看未读消息时,我想将消息更改为“您有2条未读消息。”
这可以通过Request.Redirect轻松完成,但我想避免这种情况 消息1 - >点击它将转到MarkAsRead.aspx?id = x哪个重定向到ViewMessage.aspx?id = x
而不是这样做我想将消息标记为从ViewMessage.aspx读取?id = x然后减少我的Session变量“unreadMessages”,然后让我的UserControl显示新的数字。
但我担心的是UserControls可能并不总是最后加载。
答案 0 :(得分: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.Load事件期间显示该计数。我已经提供了上述事件的完整进展,如果上述情况不充分,可能会为您提供更多选择。 (例如,您可以更新Page.Load中的计数,并在UserControl.PreRender中呈现它,如果由于某种原因Page.Init太快了。)
答案 1 :(得分:0)
检查this diagram是否有asp.net事件顺序。
我的建议:在UserControl中实现一个public void UpdateInfo(),它在调整未读消息的计数器后,从UserControl的OnLoad()事件和ViewMessage.aspx中的OnLoad()事件调用。
答案 2 :(得分:0)
我同意上述答案 - 当您依赖子用户控件加载事件时,它会变得非常棘手。考虑所有MS数据绑定控件如何工作 - 您需要在它们执行其功能之前告诉它们Bind。