【问题标题】:Setting a Property on a Control before CreateChildControls is called在调用 CreateChildControls 之前在控件上设置属性
【发布时间】:2009-03-05 22:16:28
【问题描述】:

我试图在调用控件的 CreateChildControls 方法之前在自定义 Web 控件上设置属性。原因是,在那里执行了很多逻辑,这取决于相关属性的值。我可以直接使用 HTML 中的显式值设置属性,并且它会及时获取,但这对我没有用,因为它需要基于服务器端变量。

棘手的一点是,EnsureChildControls 方法是从控件的“CONTENTS”属性的 getter 调用的,该属性对应于 ASPX 文件中的标签。例如;

<myControl>
<content>
...
</content>
</myControl>

据我所知,这反过来会触发被覆盖的 CreateChildControls 方法,并且在没有我尝试设置的属性的正确值的情况下执行逻辑。

我要解决的是,在我的页面的 ASP.NET 生命周期中,我可以设置我的属性,以便在 .NET 访问我的“CONTENT”属性的 getter 之前设置它控制?

我已经在父页面上尝试过 OnPreInit,但在控件上的 CreateChildControls 之后仍然被击中。我也不想更改控件本身,因为它是一个通用控件,我不想针对这种特殊情况对其进行特殊处理。

任何人有任何想法可以设置我的属性值,以便按照我想要达到的顺序拾取它?

【问题讨论】:

    标签: c# .net asp.net


    【解决方案1】:

    根据我的测试,如果不修改这种情况下的 Web 控件是不可能的。解析 Web 表单时,在 html 中定义的所有控件都是在 TemplateControl.FrameworkInitialize 方法期间创建的,这包括调用任何内部属性的 get 访问器。不幸的是,FrameworkInitialize 在 ProcessRequest 期间被调用,它在 ProcessRequestMain 之前,它控制页面生命周期的其余部分。

    您可以覆盖 FrameworkInitialize,但只能在 Web 控件创建之前或设置属性为时已晚之后才能访问它。

    我一直发现this image 在尝试破译页面生命周期时非常有用。

    【讨论】:

      猜你喜欢
      • 2012-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多