我试图通过扩展现有控件来避免复合控件或使用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;是你的情况。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top