C# 清除动态创建控件的Viewstate以添加新控件

C# 清除动态创建控件的Viewstate以添加新控件,c#,asp.net,controls,viewstate,dynamically-generated,C#,Asp.net,Controls,Viewstate,Dynamically Generated,我目前有一个静态下拉列表,其项在页面加载时从数据库绑定。基于此下拉列表中的选择,我在一个ID为“CustomControl1”、“CustomControl2”的表中动态生成一组控件。我需要做的是,在下拉列表中的每个选择中,都有一组不同控件类型的唯一控件,但它们都具有相同的ID(基于它们生成的顺序)。因此,当我尝试生成一组新控件时,会出现以下错误: 加载viewstate失败。加载viewstate的控件树必须与上次请求期间用于保存viewstate的控件树相匹配。例如,动态添加控件时,回发期间

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

加载viewstate失败。加载viewstate的控件树必须与上次请求期间用于保存viewstate的控件树相匹配。例如,动态添加控件时,回发期间添加的控件必须与初始请求期间添加的控件的类型和位置相匹配

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

        if (xml != "" && externalProperties.Rows.Count == 0)
        {
            LoadExternalProperties(xml);
            ValidateExternalProperties(xml);
        }
当我进行初始选择时,我能够正确地生成控件,当我进行二次选择时,无法生成控件,因为不同控件类型的ViewState不匹配

因此,我假设我需要做的是清除viewstate。我尝试了以下方法:

将viewstate设置为null(尝试在Page_Init外部和中):

清除表中的行:

externalProperties.Rows.Clear();
清除控件表:

externalProperties.Controls.Clear();
externalProperties.EnableViewState = false;
LoadExternalProperties(xml);
externalProperties.EnableViewState = true;
在加载控件之前和之后切换EnableViewState:

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

我目前正在跟踪上一个选定的索引,以确定何时必须清除viewstate。

您应该启用dropdownlist控件的viewstate=false

需要保留dropdownlist的viewstate。这是我基于dropdownlist动态生成的控件的viewstate我需要清除的值。