我想要一个用户控件,它将在 asp.NET 面板中动态添加一些复选框。
只是我相信我可以在控件的 OnPreInit 方法中轻松做到这一点。但问题是我了解到我不能在控件上使用和覆盖 OnPreInit 方法;它仅用于页面。
我不想通过调用控件上的方法从页面解决这个问题。
那么,如果我不能在控件上使用 PreInit,那么动态添加我的复选框的正确位置在哪里?
我错过了什么吗?有什么建议吗?
谢谢。
我想要一个用户控件,它将在 asp.NET 面板中动态添加一些复选框。
只是我相信我可以在控件的 OnPreInit 方法中轻松做到这一点。但问题是我了解到我不能在控件上使用和覆盖 OnPreInit 方法;它仅用于页面。
我不想通过调用控件上的方法从页面解决这个问题。
那么,如果我不能在控件上使用 PreInit,那么动态添加我的复选框的正确位置在哪里?
我错过了什么吗?有什么建议吗?
谢谢。
我认为很大程度上取决于您想对它们做什么-您应该知道动态添加的控件会获得自己的生命周期(谷歌搜索应该可以为您提供大量信息,但基本上它们会“赶上”任何阶段他们错过了)。我只提到这一点是因为您可能想研究一些陷阱 - 当我第一次经历它时,我花了几天时间来解决它。
要回答您的问题,我建议最好的地方是在控件的 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
您也可以在 Page_Load 事件中执行此操作。那有什么问题?
一般的经验法则是尽快创建自定义控件。在 PreRender 之前,控件的所有事件都会正常发生。如果您在 PreRender 添加自定义控件,它们不会加载视图状态或调用事件。
如果您尝试使用复选框的值,请尝试使用
Page.Form.FindControl("ID")