【问题标题】:Clearing Viewstate of Dynamically Created Controls to Add New Controls清除动态创建控件的视图状态以添加新控件
【发布时间】:2012-08-17 15:29:50
【问题描述】:

我目前有一个静态下拉列表,其项目在页面加载时从数据库中绑定。基于此下拉列表中的选择,我在 ID 为“CustomControl1”、“CustomControl2”等的表中动态生成一组控件。我需要做的是下拉列表中的每个选择都有一个不同控件类型的唯一控件集,但它们都具有相同的 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();

在加载控件之前和之后切换 EnableViewState:

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

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

【问题讨论】:

    标签: c# asp.net controls viewstate dynamically-generated


    【解决方案1】:

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

    【讨论】:

    • 需要保留下拉列表的视图状态。这是我根据需要清除的下拉列表值动态生成的控件的视图状态。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    相关资源
    最近更新 更多