我们已经创建了一个需要通过 Control 类的 ViewState 属性来持久化数据的控件。我们的类子类严格控制以访问 ViewState 属性(它在 Page 对象上受到保护)。我们在 OnInit 中将控件添加到 Page.Controls,然后尝试在 OnPreLoad 中设置 ViewState 属性。
当我们解码并检查页面的 ViewState 时,我们的值还没有被写出,因此不能用于以后的检索。
有谁知道我们如何让我们的控制权参与 ViewState 过程?
问题是将控件直接添加到页面。不幸的是,这在控件层次结构中太高了,无法参与 Forms ViewState 处理。如果您将控件添加到实际的 ASPNet 表单的 Controls 集合中,那么它将成功地参与 LoadViewStateRecursive 和 SaveViewStateRecursive。
尝试在 OnInit 中创建您的控件,然后在 OnLoad 期间将其添加到 Page.Controls。
ViewState 直到 OnInit 之后才加载,但在 OnLoad 之前。
这是页面生命周期 ( GregMac ) 的粗略轮廓,在回答我之前的问题时发布了此内容。