在PostBack期间更改动态加载的控件

时间:2012-04-16 13:50:31

标签: asp.net c#-4.0 dynamic-controls

我正在尝试设计一个处理EmployeeStation CRUD任务的页面,具体取决于用户的偏好。我已经对UserControl进行了子类分类以创建EditEntityControl并开发了两个自定义控件,这些控件派生自此基类,并且每个控件都处理EmployeeStation对象的CRUD活动

当用户切换下拉列表中的值,触发回发时,我想动态地将正确的控件加载到页面中。这适用于每个控件的第一次加载,但是当我尝试重新加载第一个控件(加载第二个控件后)时,我收到以下错误:

  

无法加载视图状态。 viewstate所在的控制树   正在加载必须与用于保存的控制树匹配   在上一个请求期间查看状态。例如,添加时   动态控制,回发期间添加的控件必须匹配   初始期间添加的控件的类型和位置   请求。

我还看到第二个控件的初始加载有一些奇怪的行为,其中数据绑定没有绑定到正确的控件(例如,设置按钮的文本而不是控件上的文本框)。

有没有办法处理这种情况?或者,有没有办法清除ViewState并完全重新请求页面来解决此错误?看来,如果我能解决PostBacks之间的这种ViewState混乱/混乱,其他一切都按设计工作。

1 个答案:

答案 0 :(得分:0)

上述评论中提出了很好的建议,但最终指出正确解决方案的是Joel Coehoorn对this question的回答。

我加载控件OnInit,然后在SelectionChanged事件中吹掉OnInit更改并根据需要重新创建正确的控件。感谢您提供有关使未使用的控件不可见的其他建议。我会记住这一点,以备将来参考。