好的,这是一个非常烦人的错误,我整个上午都遇到过问题!
我有一个自定义控件,我们在许多项目中使用了自定义控件,这些控件具有通过调用页面onload设置并存储在Viewstate中的属性。控件在自定义控件的CreateChildControls()方法上设置具有属性的子控件。
正常情况下,在回发时会触发Page_Load事件,然后触发页面上控件的CreateChildControls方法。
奇怪的是,我们在网站上有一个登录系统(自定义成员资格提供程序),当用户登录时,相反的情况发生CreateChildControls()方法然后触发Page_Load,因此控件属性是错误的(设置自以前的回发)
事件如何以不同的顺序发射?我认为所有页面事件都以相同的顺序发生,无论如何,我都不知道如何登录会改变该顺序。
更新:似乎问题是我没有调用EnsureChildControls(),但我不确定它应该在哪里调用?如果控件上设置了几个用于设置子控件的属性我何时应该调用EnsureChildControls(),我想我不完全理解EnsureChildControls()的作用?
答案 0 :(得分:4)
答案 1 :(得分:1)
在创建需要访问包含的子控件的服务器/用户控件的属性时,我使用以下命令:
public Whatever SomeProperty
{
get
{
EnsureChildControls();
<more code here>
}
set
{
EnsureChildControls();
<more code here>
}
}
这可确保您的控件使用者可以在页面生命周期的各个阶段自由使用您的控件。