Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 在回发期间更改动态加载的控件_Asp.net_C# 4.0_Dynamic Controls - Fatal编程技术网

Asp.net 在回发期间更改动态加载的控件

Asp.net 在回发期间更改动态加载的控件,asp.net,c#-4.0,dynamic-controls,Asp.net,C# 4.0,Dynamic Controls,我正在尝试设计一个页面,根据用户的偏好处理员工和站点CRUD任务。我对UserControl进行了子分类,以创建一个edintentitycontrol,并开发了两个自定义控件,它们派生自这个基类,每个控件处理Employee或Station对象的CRUD活动 当用户切换dropdownlist中的值(这会触发回发)时,我希望将正确的控件动态加载到页面中。这适用于每个控件的第一次加载,但当我尝试重新加载第一个控件(在加载第二个控件之后)时,会出现以下错误: 未能加载viewstate。views

我正在尝试设计一个页面,根据用户的偏好处理
员工
站点
CRUD任务。我对
UserControl
进行了子分类,以创建一个
edintentitycontrol
,并开发了两个自定义控件,它们派生自这个基类,每个控件处理
Employee
Station
对象的CRUD活动

当用户切换dropdownlist中的值(这会触发回发)时,我希望将正确的控件动态加载到页面中。这适用于每个控件的第一次加载,但当我尝试重新加载第一个控件(在加载第二个控件之后)时,会出现以下错误:

未能加载viewstate。viewstate所在的控件树 正在加载的控件必须与用于保存的控件树匹配 上一个请求期间的viewstate。例如,在添加 控件,回发期间添加的控件必须匹配 初始过程中添加的控件的类型和位置 请求

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


有没有办法处理这种情况?或者,有没有办法清除
ViewState
并完全重新请求页面以避开此错误?看来,如果我能清除回发之间的这种
ViewState
混乱/混乱,其他一切都按设计进行了。

上述评论中给出了很好的建议,但Joel Coehoorn的回答最终为我指出了正确的解决方案


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

如果您不需要ViewState,您是否尝试过在控件或基本控件上将
EnableViewState
设置为false?但是,我确实需要在某些回发中使用
ViewState
。这些是输入表单,因此如果用户在其中一个表单上单击submit,我需要该实例中的
ViewState
将值持久化到数据库中。我只想在请求第二个输入控件的实例中清除
ViewState
。首先,如果用户控件的数量是可预测的,最好只切换其可见性。根本不会呈现不可见的控件,因此性能不是参数。除此之外,您应该向我们展示在哪里(页面生命周期中)以及如何加载这些控件。请注意,您可以在页面加载后动态添加控件,但不能在加载后重新创建控件(例如,在事件处理程序中)。你给他们分配了静态ID了吗?它是如何产生的?@TimSchmelter:很好的建议。