![]() |
Модераторы: gambit |
![]() ![]() ![]() |
|
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
Думаю, многие сталкивались с проблемой, что при динамическом создании контролов иерархия объектов должна оставаться той же, что и при предыдущем postback'е. Таким образом, если, например, заполнять PlaceHolder динамическими компонентами на основании POST-данных, может возникнуть ситуация, когда иерархия относительно предыдущего postback'а изменится. В этом случае добавление динамических контролов в коллекцию Controls приведет к исключению "Failed to load viewstate".
Данная проблема решается путем загрузки и удаления контролов из предыдущего postback'а, а только затем загрузкой нового контрола. Однако при использовании большого числа контролов такой подход становится мало того, что утомительным, да еще и очень неэффективным. Вот, собственно, меня и интересует, есть ли более рациональные подходы для решения данной проблемы (за исключением отключения ViewState, конечно ![]() |
|||
|
||||
anabiosys |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 483 Регистрация: 17.3.2007 Репутация: нет Всего: 2 |
Тоже столкнулся с этой проблемой. Работающего решения так и не нашёл. В msdn советуют просто отключить viewstate, до такого я и сам бы догадался, но сохранять данные вручную не очень то хочется. Кто-то с этим ещё боролся?
|
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 34 Всего: 170 |
что-то как-то туманно. Такой сложный вопрос, да в такую рань задается!
![]() Пример проблемы можно запостить? -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
anabiosys |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 483 Регистрация: 17.3.2007 Репутация: нет Всего: 2 |
В общем, в page_init есть код, который при нажатии на одну кнопку загружает в панель Control1, а при нажатии на другую - Control2. В этих контролах находятся по repeater'у, которые принимают с данные и геренерят на их основе html код и некоторые элементы управления. Так вот если мы нажмём сначала на Button1, а потом на Button2, то вылетит 'Failed to load viewstate'
Control1
Control2 наподобие, только оперирует другими данными и имеет другую структуру. Вот как-то так... Это сообщение отредактировал(а) anabiosys - 21.12.2007, 14:13 |
||||
|
|||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
Ух, какое старье подняли
![]() Насколько я помню, в качестве решения данной проблемы предлагается: 1. при первой (и каждой последующей) загрузке запоминать во ViewState, какой контрол был загружен 2. при постбэке сначала создать предыдущий контрол и добавить его, например, в PlaceHolder 3. очистить содержимое этого PlaceHolder'а 4. создать нужный контрол и вставить его в тот самый PlaceHolder (не забыв при это записать имя нового контрола во ViewState). Где-то так ;) |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Разработка под ASP.NET | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |