Является ли EnsureChildControls () в OnLoad чем-то вроде запаха кода? - PullRequest
0 голосов
/ 07 марта 2011

Сейчас я использую валидаторы для некоторых пользовательских CompositeControls, и для того, чтобы проверка работала на стороне сервера, мне нужно сделать следующее:

protected override void OnLoad(EventArgs e)
{
    EnsureChildControls();
    base.OnLoad(e);
}

У меня естьеще не полностью понял жизненный цикл страницы ASP.NET, и мне интересно, является ли это чем-то вроде запаха ASP в целом, или это нормально?

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

1 Ответ

0 голосов
/ 07 марта 2011

Скажем, ваша подпрограмма, которая добавляет валидаторы: CrateValidators ()

Я бы посоветовал вам переместить это в Page_Init и LoadViewState в основном

bool _doCreateValidators=false;
void OnPageInit(sender,args){
    if(_doCreateValidators){
        CreateValidators();
    }
}

protected override void LoadViewState(StateBag savedState){
       CreateValidators();
       _doCreateValidators = false;
       base.LoadViewState(savedState);
}
...