我现在正在使用验证器为一些自定义CompositeControls
弄乱,为了使服务器端验证正常工作,我需要执行以下操作:
protected override void OnLoad(EventArgs e)
{
EnsureChildControls();
base.OnLoad(e);
}
我还没有完全掌握ASP.NET页面生命周期,我想知道这是否有点像一般的ASP气味,还是可以的?
(我需要调用EnsureChildControls()
的原因是因为我的验证器是在CreateChildControls()
中动态添加的,但似乎服务器端验证是在自然调用CreateChildControls()
之前执行的,并且因此,在我实际创建任何验证器之前。所以我调用EnsureChildControls()
强制它们存在。)
答案 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);
}