【发布时间】:2011-01-26 14:15:39
【问题描述】:
我最初的理解是asp.net页面生命周期在正常情况下对所有页面和控件运行一次。当我在容器的 OnPreRender 期间附加控件时,遇到了未调用控件的 OnInit 的情况。好的,我认为这是我的代码中的一个错误,并通过较早地附加控件进行了修复。
但是就在今天,我遇到了一种情况,在为其他所有人完成正常的 OnInit 之后,似乎调用了控件的 OnInit。请参阅下面的堆栈。似乎在页面的 PreRender 期间,控件的 OnInit 被调用,因为它正在被动态添加。
所以我只想确认一下 ASP.NET 的行为是什么?它是否真的跟踪每个控件生命周期的阶段,并且在添加新控件时,它会从一开始就运行?
[HttpException (0x80004005): 在 DataBind、Init、Load、PreRender 或 Unload 阶段无法修改控件集合。] System.Web.UI.ControlCollection.Add(控制子)+8678663 MyCompany.Web.Controls.SetStartPageWrapper.Initialize() MyCompany.Web.Controls.SetStartPageWrapper.OnInit(EventArgs e) System.Web.UI.Control.InitRecursive(控件命名容器)+333 System.Web.UI.Control.InitRecursive(控件命名容器)+210 System.Web.UI.Control.AddedControl(Control control, Int32 index) +198 System.Web.UI.ControlCollection.Add(控制子)+80 MyCompany.Web.Controls.PageHeader.OnPreRender(EventArgs e) 在 System.Web.UI.Control.PreRenderRecursiveInternal() +80 System.Web.UI.Control.PreRenderRecursiveInternal() +171 System.Web.UI.Control.PreRenderRecursiveInternal() +171 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +842
【问题讨论】:
标签: asp.net