动态控制更改后“无法加载ViewState”

时间:2010-04-28 15:22:56

标签: c# asp.net failed-to-load-viewstate

在我的ASP.NET页面中,我必须动态选择并加载自定义控件,具体取决于下拉列表中的选定值。但是,我遇到了以下问题: 当动态加载的控件的参数被更改,然后下拉列表中的选择被更改(因此在下次页面重新加载时强制我加载不同的动态控件)时,我最终得到“无法加载ViewState”异常。我认为这是因为ViewState正在尝试恢复旧控件的参数而它找不到它。 那么,有没有办法阻止视图状态尝试恢复非existig控件的状态?

4 个答案:

答案 0 :(得分:1)

您最初应以完全相同的方式加载控件,然后在LoadViewState之后更改控件,或者在您知道不会与页面同步的动态控件上禁用视图状态。

答案 1 :(得分:0)

在恢复视图状态之前,听起来似乎没有恢复下拉/添加控件的状态。如果你有下拉默认显示控件X,并且用户将其更改为显示控件Y,页面必须在控件集合中添加控件Y才能恢复视图状态。

答案 2 :(得分:0)

存在同样的问题,即用户添加,重新安排和/或修改了可变长度的控件列表,并且在每次回发期间都可以进行更改。

答案非常简单。

在之前创建动态控件集“ EnableViewState = False 时,将其添加到页面控件集合中。然后,不存储任何视图状态信息,无论添加或删除多少动态控件,或者重新排序视图状态,其他所有内容都将正常工作。

如果你动态添加它们,你通常会设置所有的属性,所以它实际上并没有在我的情况下创建任何非常相似的工作。

答案 3 :(得分:0)

我对网格控制也有同样的问题。我动态地绑定了数据视图,根据DarrenMB的解决方案,我只写了EnableViewState = false;问题解决了。

Infragistics.Web.UI.DataSourceControls.DataView dvMesaj = new Infragistics.Web.UI.DataSourceControls.DataView();


        whdsShowMessages.DataRelations.Clear();
        whdsShowMessages.DataViews.Clear();
        whgridShowMessages.Rows.Clear();
        EnableViewState = false; //here is the solution..
        whdsShowMessages.DataViews.Add(dvKisi);
        whdsShowMessages.DataViews.Add(dvMesaj);