Каково правильное использование EnsureChildControls()?

Чаще всего я использую его, когда я получаю доступ к свойству составного элемента управления, который зависит от дочернего элемента управления. Но я также добавил его в OnInit элемента управления, чтобы я мог убедиться, что скрытое поле было добавлено правильно. Всего минуту назад я назвал его в RenderControl, потому что у меня возникла проблема с расширением календаря, и он исправил его. Я начинаю немного смущаться, когда мне это нужно, и когда мне не нужно звонить EnsureChildControls и когда я должен его называть. Любые указатели приветствуются. Спасибо!

Ответ 1

EnsureChildControls запускает CreateChildControl, если он еще не был запущен раньше. Это нужно делать только один раз в жизненном цикле страницы. Я называю это безоговорочно в OnInit/Page_Init и нигде больше. Преимущество этого места заключается в том, что элементы управления создаются до того, как ASP.NET загрузит ViewState. Если вы используете ViewState или ControlState, необходимо создать дочерние элементы управления, которые ранние.

Ответ 2

Метод EnsureChildControls гарантирует, что дочерние элементы управления будут созданы до их доступа.

В любое время, когда вы пишете составные элементы управления, например, вы хотите создать свои элементы управления внутри событий CreateChildControls, затем вызовите EnsureChildControls перед тем, как обратиться к ним, чтобы убедиться, что все элементы управления были созданы, поэтому вы не получите исключение с нулевой ссылкой.