2012-04-16 22 views
2

我试图根据用户的偏好设计一个处理EmployeeStationCRUD任务的页面。我已将子类UserControl创建为EditEntityControl,并开发了两个自定义控件,该控件从此基类派生并各自处理EmployeeStation对象的CRUD活动。在回发期间更改动态加载的控件

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

Failed to load viewstate. The control tree into which viewstate is being loaded must match the control tree that was used to save viewstate during the previous request. For example, when adding controls dynamically, the controls added during a post-back must match the type and position of the controls added during the initial request.

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

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

+0

如果您不需要ViewState,您是否曾尝试在控件或基本控件上将'EnableViewState'设置为false? – 2012-04-16 14:01:51

+0

但是,我确实需要一些PostBack上的'ViewState'。这些是输入表单,所以如果用户单击其中一个表单上的提交,我需要该实例中的'ViewState'来将这些值保存到数据库中。我只想在请求第二个输入控件的实例中清除“ViewState”。 – 2012-04-16 14:05:50

+1

首先,如果数字是可预测的,那么切换UserControls的可见性会更好。不可见的控制根本不会被渲染,所以性能不是一个参数。除此之外,您应该向我们展示(在页面的生命周期中)以及您如何加载这些控件。请注意,您可以在page_load之后动态添加控件,但之后无法**重新创建**控件(即在事件管理器中)。你有分配静态ID给他们吗?它是如何创建的? – 2012-04-16 14:28:42

回答

0

以上评论中的重要建议,但最终指出我正确的解决方案是乔尔科霍恩对this question的回答。

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