清除动态创建的控件的视图状态以添加新控件



我目前有一个静态下拉列表,其项目在页面加载时从数据库绑定。根据此下拉列表中的选择,我在具有ID的"自定义控件1","自定义控件2"等的表中动态生成一组控件。我需要做的是,对于下拉列表中的每个选择,都有一组不同控件类型的唯一控件,但它们都具有相同的 ID(基于它们的生成顺序)。因此,当我尝试生成一组新的控件时,出现此错误:

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

因此,在页面加载中,我有两种方法,一种基于xml生成控件,另一种创建如下所示的验证控件:

        if (xml != "" && externalProperties.Rows.Count == 0)
        {
            LoadExternalProperties(xml);
            ValidateExternalProperties(xml);
        }
当我进行初始选择时,

我能够正确生成控件,当我进行辅助选择时,无法生成控件,因为视图状态与不同的控件类型不匹配。

所以我假设我需要做的是清除视图状态。我尝试了以下方法:

将视图状态设置为 null(在 Page_Init 和 In 之外尝试):

ViewState["CustomControl1"] = null;

清除表中的行:

externalProperties.Rows.Clear();

清除控件表:

externalProperties.Controls.Clear();

在加载控件之前和之后切换启用视图状态:

externalProperties.EnableViewState = false;
LoadExternalProperties(xml);
externalProperties.EnableViewState = true;
  • 我只需要在下拉列表的选定索引更改时清除视图状态。这是因为在以下步骤(使用向导)中,我正在检索值并将其用于其他目的。

我目前正在跟踪先前选择的索引,以确定何时必须清除视图状态。

您应该 EnableViewState = false 的下拉列表控件。

最新更新