Asp.net 如果无法在控件中使用OnPreInit,如何在正确的时间动态添加控件?

Asp.net 如果无法在控件中使用OnPreInit,如何在正确的时间动态添加控件?,asp.net,user-controls,dynamic,onpreinit,preinit,Asp.net,User Controls,Dynamic,Onpreinit,Preinit,我想有一个用户控件,它将在asp.NET面板中动态添加一些复选框 我只是相信我可以在control的OnPreInit方法中轻松做到这一点。但问题是我知道我不能在控件上使用和重写OnPreInit方法;它仅用于页面 我不想通过调用控件上的方法从页面解决这个问题 因此,如果我不能在控件上使用PreInit,那么哪里是动态添加复选框的正确位置 我错过什么了吗?有什么建议吗 谢谢。您也可以在页面加载事件中执行此操作。这有什么问题?如果您试图使用复选框的值,请尝试使用 Page.Form.FindCo

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

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

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

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

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


谢谢。

您也可以在页面加载事件中执行此操作。这有什么问题?

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

 Page.Form.FindControl("ID")

我认为这在很大程度上取决于你想用它们做什么——你应该知道,动态添加的控件会有自己的生命周期(谷歌搜索应该会给你提供大量信息,但本质上它们会“赶上”他们错过的任何阶段)。我之所以提到这一点,是因为你可能想探究其中的一些陷阱——当我第一次经历它时,我花了几天的时间来思考它

为了回答您的问题,我建议最好在控件的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

一般的经验法则是尽可能快地创建自定义控件。在PreRender之前,控件的所有事件都将正确发生。如果在PreRender中添加自定义控件,则不会加载其viewstate或调用事件。

控件的viewstate将在Init event中加载。如果我添加加载控件事件,则在Init事件中,当控件不存在时,将尝试加载ViewState。因此,它不能以这种方式工作。对于动态控件,viewstate将在每次回发中出现,但控件将不存在,因此您必须在页面加载的每次回发中创建这些控件。这不是查找它们,而是在正确的位置创建它们。很棒的列表,今天刚刚帮助了我+1.