OnLoad中的EnsureChildControls()是否有点代码味?

时间:2011-03-07 14:29:57

标签: c# asp.net validation controls

我现在正在使用验证器为一些自定义CompositeControls弄乱,为了使服务器端验证正常工作,我需要执行以下操作:

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

我还没有完全掌握ASP.NET页面生命周期,我想知道这是否有点像一般的ASP气味,还是可以的?

(我需要调用EnsureChildControls()的原因是因为我的验证器是在CreateChildControls()中动态添加的,但似乎服务器端验证是在自然调用CreateChildControls()之前执行的,并且因此,在我实际创建任何验证器之前。所以我调用EnsureChildControls()强制它们存在。)

1 个答案:

答案 0 :(得分:0)

说你添加验证器的例程是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);
}