虽然看起来制作服务器控件的“正确”方法是在CreateChildControls调用中构造所有子控件。但是因为很难知道它何时会被调用(这就是整数优化的全部要点),所以我看到我们的大多数开发都是在OnInit或OnLoad中构建的。这种情况占99%。
是否存在必须使用CreateChildControls的情况?
答案 0 :(得分:4)
您应该始终在CreateChildControls中构建子控件。这是生命周期中初始化并将其添加到控制树的适当时间。其中一个原因是很多次调用了EnsureChildContols方法,然后在必要时调用CreateChildControls。最佳实践,就这样做。
答案 1 :(得分:2)
只要ASP.NET页面框架需要创建控件树,就会调用CreateChildControls方法,并且此方法调用不限于控件生命周期中的特定阶段。例如,可以在加载页面,数据绑定期间或渲染期间调用CreateChildControl。
答案 2 :(得分:0)
在性能方面,等待创建子控件将为您的服务器节省一些不必要的CPU时间。例如,如果在调用CreateChildControls()之前引发异常或中止线程,则会保存创建这些控件所需的时钟周期。
你有什么理由说在OnInit中创建控件比在CreateChildControls()期间更高效?
答案 3 :(得分:0)
您将在Init或Load中创建控件,直到您编写需要重新创建控件的控件。
我发现最好在CreateChildControls中创建控件,然后使用EnsureChildControls控制以确保在需要时创建它们。这使您能够通过将ChildControlsCreated设置为false来拆除控件,并在需要时再次重新创建它们。