2009-03-04 94 views
1

我想在调用控件的CreateChildControls方法之前在自定义Web控件上设置属性。原因是,在那里执行了很多逻辑,这取决于所讨论的财产的价值。我可以直接使用HTML中的显式值设置属性,并及时提取属性,但这对我来说没用,因为它需要基于服务器端变量。在调用CreateChildControls之前在控件上设置属性

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

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

据我所知,这反过来又触发重写CreateChildControls方法,使逻辑不为我试图设置该属性正确的值执行。

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

我试过在父页上的OnPreInit,但仍然是在控件的CreateChildControls之后被击中。我也不想改变控制本身,因为它是一个通用控件,我不想特殊情况下为这个特殊情况。

任何人有任何想法,我可以设置我的财产价值,所以它是按照我试图实现的顺序拾起的?

回答

3

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

您可以重写FrameworkInitialize,但只能在Web控件创建之前或设置属性后才能访问Web控件。

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

+0

非常有帮助的答案,谢谢。 – 2009-03-05 15:38:15

相关问题