2

我想要一个用户控件,它将在 asp.NET 面板中动态添加一些复选框。

只是我相信我可以在控件的 OnPreInit 方法中轻松做到这一点。但问题是我了解到我不能在控件上使用和覆盖 OnPreInit 方法;它仅用于页面。

我不想通过调用控件上的方法从页面解决这个问题。

那么,如果我不能在控件上使用 PreInit,那么动态添加我的复选框的正确位置在哪里?

我错过了什么吗?有什么建议吗?

谢谢。

4

4 回答 4

2

我认为很大程度上取决于您想对它们做什么-您应该知道动态添加的控件会获得自己的生命周期(谷歌搜索应该可以为您提供大量信息,但基本上它们会“赶上”任何阶段他们错过了)。我只提到这一点是因为您可能想研究一些陷阱 - 当我第一次经历它时,我花了几天时间来解决它。

要回答您的问题,我建议最好的地方是在控件的 OnInit 阶段添加复选框。为了您的信息,我在标准页面加载期间发生事件的标准顺序下方提供了信息,并在页面上声明了正常的自定义控件。

Page: Constructor

Page: OnPreInit

---- Declared Controls Constructed ----

Control: OnInit

Page: OnInit

Page: OnInitComplete

Page: LoadViewState

Control: LoadViewState

Page: OnPreLoad

Page: OnLoad

Control: OnLoad

---- Any Control Events (e.g. btnClick) ----

Page: OnLoadComplete

Page: OnPreRender

Control: OnPreRender

Page: OnPreRenderComplete

Page: SaveViewState

Control: SaveViewState

Page: OnSaveStateComplete

Page: Render

Page: RenderChildren  -> Control: Render

Control: OnUnload

Page: OnUnload
于 2009-12-23T14:40:32.203 回答
0

您也可以在 Page_Load 事件中执行此操作。那有什么问题?

于 2009-12-23T09:21:42.843 回答
0

一般的经验法则是尽快创建自定义控件。在 PreRender 之前,控件的所有事件都会正常发生。如果您在 PreRender 添加自定义控件,它们不会加载视图状态或调用事件。

于 2009-12-23T15:49:07.280 回答
0

如果您尝试使用复选框的值,请尝试使用

 Page.Form.FindControl("ID")
于 2009-12-23T10:11:30.633 回答