Очистка состояния просмотра динамически создаваемых элементов управления для добавления новых элементов управления

В настоящее время у меня есть статический раскрывающийся список, элементы которого привязываются из базы данных при загрузке страницы. На основе выбора в этом раскрывающемся списке я динамически создаю набор элементов управления в таблице с идентификаторами «CustomControl1», «CustomControl2» и т. Д. Что мне нужно сделать, так это с каждым выбором в раскрывающемся списке есть уникальный набор элементов управления разных типов, но все они имеют одинаковый идентификатор (в зависимости от порядка их создания). Поэтому, когда я пытаюсь создать новый набор элементов управления, я получаю эту ошибку:

Не удалось загрузить состояние просмотра. Дерево элементов управления, в которое загружается состояние просмотра, должно соответствовать дереву элементов управления, которое использовалось для сохранения состояния просмотра во время предыдущего запроса. Например, при динамическом добавлении элементов управления элементы управления, добавленные во время обратной передачи, должны соответствовать типу и положению элементов управления, добавленных во время первоначального запроса.

Итак, при загрузке страницы у меня есть два метода: один генерирует элемент управления на основе 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;
  • Мне нужно очистить состояние просмотра только при изменении выбранного индекса раскрывающегося списка. Это потому, что на следующем шаге (с помощью мастера) я получаю значения и использую их для некоторых других целей.

В настоящее время я отслеживаю предыдущий выбранный индекс, чтобы выяснить, когда мне нужно очистить состояние просмотра.


person Eric    schedule 17.08.2012    source источник


Ответы (1)


В раскрывающемся списке необходимо указать EnableViewState = false.

person İbrahim ULUDAĞ    schedule 19.08.2012
comment
состояние просмотра для раскрывающегося списка необходимо сохранить. Это состояние просмотра элементов управления, которые я динамически генерирую на основе значения раскрывающегося списка, которое мне нужно очистить. - person Eric; 20.08.2012