如何使用动态添加的Control子类访问Control.ViewState?
时间:2020-03-06 14:41:48 来源:igfitidea点击:
我们创建了一个控件,该控件需要通过Control类的ViewState属性持久化数据。我们的类子类严格控制访问ViewState属性的权限(该属性在Page对象上受保护)。我们将控件添加到OnInit中的Page.Controls中,然后尝试在OnPreLoad中设置ViewState属性。
当我们解码并检查页面的ViewState时,我们的值尚未被写出,因此无法用于以后的检索。
有谁知道我们如何让我们的控件参与ViewState流程?
解决方案
尝试在OnInit中创建控件,然后在OnLoad期间将其添加到Page.Controls中。
直到OnInit之后,但在OnLoad之前,ViewState才加载。
这是Page Life-Cycle(GregMac)的粗略概述,以回应我的一个早期问题。
初始化
LoadViewState
加载回发数据
呼叫控制加载事件
通话载入事件
通话控制事件
控制预渲染
预渲染
SaveViewState
卸下
问题是直接将控件添加到Page中。不幸的是,这在控件层次结构中太高了,无法参与Forms ViewState Handling。如果将控件添加到实际的ASPNet Form的Controls集合中,则它将成功地参与LoadViewStateRecursive和SaveViewStateRecursive。