我有一个相当复杂的布局,看起来像这样:
UserControl A的模板按如下方式加载:
protected void Page_Load(object sender, EventArgs e)
{
if (CommandsTemplate != null)
{
SimpleDataItemContainer commandsContainer = new SimpleDataItemContainer(CurrentSurvey);
CommandsTemplate.InstantiateIn(commandsContainer);
CommandsPlaceHolder.Controls.Add(commandsContainer);
}
DataBind();
LayoutDataBound?.Invoke(this, null);
}
然后页面会在LayoutDataBound
事件中选择在UserControl
B上设置属性。这一切都适用于初始加载,我可以在UserControl
上看到所需的属性值但是,当ASPxUploadControl
通过选择&{39; Upload
'来触发回发时一旦commandTemplate重建并在UploadControl_FileUploadComplete
之前,事件处理程序DataBind()
就会被触发。
由于该方法需要由LayoutDataBound
事件处理程序设置的属性,因此整个进程都在堆中。
我花了很多时间尝试在生命周期中尽早设置模板化控件,而不需要在页面加载时重新创建这些控件,以确定之前设置的属性值是否可用于ViewState
,但我没有取得任何成功。如果我不重新创建每个加载的控件,那么它们就不可见了。
是否有人能够指出我在这里做错了什么?