【问题标题】:What is the correct ASP.NET Control event/method in which to add nested controls?添加嵌套控件的正确 ASP.NET 控件事件/方法是什么?
【发布时间】:2023-03-09 12:54:01
【问题描述】:

在 ASP.NET 生命周期中动态添加子控件的正确事件/方法是什么?

我的目标是确保用户控件上的所有输入控件都具有正确关联的验证器和标签控件,基于来自外部文件的配置。

似乎正确的位置应该是OnInit(EventArgs e) 或CreateChildControls()。他们俩的行为都有些出乎意料,与其尝试调试他们每个人,我想我会先问你们使用哪一个(或其他)。

【问题讨论】:

  • 想解释一下您遇到的问题吗?
  • @asawyer,我一直在移动东西试图弄清楚。到目前为止,我得到了一个OutOfMemoryException(让我觉得我在那里导致了一个无限循环),一个“找到了具有相同 ID 'dynamicallyAddedRequiredFieldValdiator' 的多个控件”(让我觉得我把它放在了导致例程的地方被调用两次),“集合已修改,枚举可能无法执行”错误和“在 DataBind、Init、Load、PreRender 或 Unload 阶段无法修改控件集合。”。
  • 这是自定义服务器控件还是 Web 用户控件 (ASCX)?
  • @James,它是一个网页用户控件,但是,如果对这个区别有区别,请注明,谢谢!

标签: asp.net user-controls webforms asp.net-controls createchildcontrols


【解决方案1】:

它的 OnInit,您需要在第一次加载时执行它和回发。

【讨论】:

  • 所以,我将例程称为 ALWAYS OnInit,也总是在 PostBack 上?还是我从 OnInit 调用它并确保它是 (a) 第一次加载或 (b) 回发。能具体一点吗?
  • 如果您将代码放在OnInit 中,则每次发布页面时都会调用它——第一次、最后一次以及其间的每次回发。
  • @smartcaveman - 在 OnInit 中创建您的控件,并在每次调用时执行此操作,例如不检查回发。
【解决方案2】:

由于这是一个 Web 用户控件 (ASCX),因此在 OnInit 期间创建动态控件。通过在OnInit 期间创建它们,它们将在第一个页面加载和每次回发时创建。

CreateChildControls 方法通常用于在自定义服务器控件中呈现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 2010-12-22
    • 2023-01-27
    • 1970-01-01
    • 2011-12-31
    • 2012-01-16
    • 2012-06-09
    相关资源
    最近更新 更多