代码之家  ›  专栏  ›  技术社区  ›  Chris McAtackney

在调用CreateChildControls之前设置控件的属性

  •  1
  • Chris McAtackney  · 技术社区  · 16 年前

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

    棘手的一点是,正在从控件的“contents”属性的getter调用EnsureChildControls方法,该属性对应于aspx文件中的标记。例如。;

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

    据我所知,这反过来会触发被重写的CreateChildControls方法,并且逻辑的执行没有我要设置的属性的正确值。

    我想知道的是,在我的页面的ASP.NET生命周期中,我可以在哪里设置我的属性,以便它在.NET访问我的控件的“content”属性的getter之前设置?

    我在父页上尝试过OnPreInit,但在控件上的CreateChildControls之后仍然会点击它。我也不想改变控件本身,因为它是一个通用控件,我不想在这个特殊情况下对它进行特殊的大小写。

    有人知道我可以在哪里设置我的财产价值,以便按照我试图实现的顺序提取它吗?

    1 回复  |  直到 16 年前
        1
  •  3
  •   bstoney    16 年前

    根据我的测试,在这种情况下不修改Web控件是不可能的。分析Web窗体时,在templateControl.frameworkInitialize方法期间创建HTML中定义的所有控件,这包括调用任何内部属性的get访问器。不幸的是,在processRequest过程中调用了frameworkInitialize,该过程早于控制页面生命周期剩余部分的processRequestMain。

    您可以重写frameworkinitialize,但只能在创建Web控件之前或设置该属性为时已晚之后访问它。

    我总能找到 this image 在尝试破译页面生命周期时非常有用。