我正在尝试在自定义web控件的CreateChildControls方法被调用之前设置该控件的属性。原因是,在那里执行了许多逻辑,这取决于所讨论的属性的值。我可以在HTML中使用显式的值直接设置该属性,它会被及时提取,但这对我没有任何用处,因为它需要基于服务器端变量。
棘手的一点是,EnsureChildControls方法是从控件的"CONTENTS“属性的getter中调用的,该属性对应于ASPX文件中的标记。例如:
<myControl>
<content>
...
</content>
</myControl>据我所知,这反过来会触发被覆盖的CreateChildControls方法,并且在没有为我试图设置的属性设置正确的值的情况下执行逻辑。
我要解决的问题是,在页面的内容生命周期中,我可以在.NET访问我的控件的“ASP.NET”属性的getter之前设置属性吗?
我已经在父页面上尝试过OnPreInit,但在控件上使用CreateChildControls之后,仍然会遇到这种情况。我也不想改变控件本身,因为它是一个泛型控件,我不想在这种特殊情况下对它进行特殊处理。
有谁知道我可以在哪里设置我的属性值,这样它就会按照我想要实现的顺序来提取?
发布于 2009-03-05 14:16:29
根据我的测试,在这种情况下不修改web控件是不可能的。当解析web表单时,html中定义的所有控件都是在TemplateControl.FrameworkInitialize方法期间创建的,这包括调用任何内部属性的get访问器。不幸的是,FrameworkInitialize是在ProcessRequest期间调用的,它早于ProcessRequestMain,后者控制页面生命周期的其余部分。
您可以重写FrameworkInitialize,但只能在创建web控件之前或在设置该属性为时已晚之后才能访问该web控件。
我总是发现this image在尝试破译页面生命周期时非常有用。
https://stackoverflow.com/questions/610169
复制相似问题