3

我试图通过扩展现有控件来避免复合控件或使用和 ASCX。但是,我无法将控件添加到继承的控件并保持其视图状态/回发完整性。每当我在预渲染期间添加控件时,控件都会显示,但回发会引发视图状态异常。我尝试在那里和 LoadViewState 期间添加它们(这当然是一个长期的愚蠢)。Init 在我扩展的控件中不可用。

异常是 Sys.WebForms.PageRequestManagerServerErrorException:无法加载视图状态。正在加载视图状态的控制树必须与在先前请求期间用于保存视图状态的控制树匹配。例如,动态添加控件时,回发期间添加的控件必须与初始请求期间添加的控件的类型和位置相匹配

4

2 回答 2

4

实际上,微软说你应该重写CreateChildControls方法。

您可以在添加控件之前或之后调用基类方法,我不确定那里是否有约定。

protected override void CreateChildControls(){
  Controls.Add(someControl);
  base.CreateChildControls();
}

希望有帮助!

于 2008-11-17T19:40:26.913 回答
3

您应该在 OnInit 或 CreateChildControls 中添加它们。无论如何,为了避免 ViewState 出现问题,请阅读这篇很棒的文章。您的情况可能是示例“4. 以编程方式初始化子控件”。

于 2008-11-17T19:40:07.583 回答