Изчистване на състоянието на изглед на динамично създадени контроли за добавяне на нови контроли

В момента имам статичен падащ списък, чиито елементи се свързват от база данни при зареждане на страница. Въз основа на избора в този падащ списък динамично генерирам набор от контроли в таблица с идентификатори „CustomControl1“, „CustomControl2“ и т.н. Това, което трябва да направя, е с всеки избор в падащия списък да има уникален набор от контроли от различни типове контроли, но всички те имат един и същ идентификатор (въз основа на реда, в който са генерирани). Така че, когато се опитам да генерирам нов набор от контроли, получавам тази грешка:

Неуспешно зареждане на viewstate. Контролното дърво, в което се зарежда viewstate, трябва да съответства на контролното дърво, което е използвано за запазване на viewstate по време на предишната заявка. Например, когато добавяте контроли динамично, контролите, добавени по време на обратна публикация, трябва да съответстват на типа и позицията на контролите, добавени по време на първоначалната заявка.

Така че при зареждането на страницата имам два метода, единият генерира контрола въз основа на xml и друг, който създава контроли за валидиране по следния начин:

        if (xml != "" && externalProperties.Rows.Count == 0)
        {
            LoadExternalProperties(xml);
            ValidateExternalProperties(xml);
        }

Когато направя първоначалния си избор, мога да генерирам контролите правилно, когато направя вторичен избор, контролите не могат да бъдат генерирани, тъй като състоянията на изглед не съвпадат за различните типове контроли.

Така че предполагам, че това, което трябва да направя, е да изчистя състоянието на изглед. Опитах следното:

Задаване на viewstate на 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