在扩展asp.net Web控件时,应该在哪个事件中注入其他Web控件?
-
08-07-2019 - |
题
我试图通过扩展现有控件来避免复合控件或使用ASCX。但是,我无法将控件添加到继承的控件中并保持其视图状态/后置完整性。每当我在预渲染期间添加控件时,控件都会显示,但是post-back会抛出一个viewstate异常。我尝试在那里和LoadViewState期间添加它们(当然这是一个长镜头傻)。我正在扩展的控件中无法使用Init。
例外是 Sys.WebForms.PageRequestManagerServerErrorException: 无法加载视图状态。控制 viewstate所在的树 loaded必须与控制树匹配 用于保存viewstate期间 先前的请求。例如, 当动态添加控件时, 必须在回发期间添加的控件 匹配的类型和位置 初始期间添加的控件 请求
解决方案
实际上,microsoft说你应该覆盖 CreateChildControls 方法。
你可以在添加控件之前或之后调用基类方法,我不确定那里是否有约定。
protected override void CreateChildControls(){
Controls.Add(someControl);
base.CreateChildControls();
}
希望有所帮助!
其他提示
您应该在OnInit或CreateChildControls中添加它们。无论如何,为了避免ViewState出现问题,请阅读这篇伟大的文章。可能,样本<!> 4。以编程方式初始化子控件<!> quot;是你的情况。
不隶属于 StackOverflow