我正在尝试在调用控件的CreateChildControls方法之前在自定义Web控件上设置属性。原因是,在那里执行了很多逻辑,这取决于所讨论的属性的值。我可以使用HTML中的显式值直接设置属性并及时获取,但这对我没用,因为它需要基于服务器端变量。
棘手的是,从控件的“CONTENTS”属性的getter调用EnsureChildControls方法,该属性对应于ASPX文件中的标记。 e.g;
<myControl>
<content>
...
</content>
</myControl>
据我所知,这反过来会触发重写的CreateChildControls方法,并且执行的逻辑没有我正在尝试设置的属性的正确值。
我正在尝试解决的问题是,在我的页面的ASP.NET生命周期中,我可以设置我的属性,以便在.NET访问我的“CONTENT”属性的getter之前设置它。控制?
我在父页面上尝试过OnPreInit,但是仍然在控件上的CreateChildControls之后被击中。我也不想改变控件本身,因为它是一个通用控件,我不想特殊情况下这个特殊情况。
任何人都有任何想法,我可以设置我的属性值,以便按照我想要达到的顺序选择它?
答案 0 :(得分:3)
从我的测试来看,如果没有在这种情况下修改Web控件是不可能的。解析Web表单时,在TemplateControl.FrameworkInitialize方法中创建html中定义的所有控件,这包括调用任何内部属性的get访问器。不幸的是,在ProcessRequest期间调用FrameworkInitialize,它在ProcessRequestMain之前调用,它控制页面生命周期的剩余部分。
您可以覆盖FrameworkInitialize,但只能在创建Web控件之前或在设置属性为时已晚之后访问该控件。
在尝试破译页面生命周期时,我总是发现this image非常有用。