【问题标题】:Is EnsureChildControls() in OnLoad a bit of a code smell?OnLoad 中的 EnsureChildControls() 是否有点代码味道?
【发布时间】:2011-07-10 09:41:15
【问题描述】:

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

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

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

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

【问题讨论】:

  • Asp.net 是代码味道:) 使用 MVC
  • 哈,我希望 :-) 这一切都必须适合 SharePoint 2007,它不能很好地与 ASP MVC 配合使用。

标签: c# asp.net validation controls


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 2010-10-22
    • 2022-10-04
    • 1970-01-01
    • 2016-11-17
    相关资源
    最近更新 更多