2010-04-28 2 views
0

На моей странице ASP.NET мне приходится динамически выбирать и загружать настраиваемый элемент управления в зависимости от выбранного значения в раскрывающемся списке. Однако я столкнулся со следующей проблемой: Когда параметры динамически загруженный элемент управления изменяется, а затем выбор в раскрывающемся списке изменяется (заставляя меня загружать другой динамический элемент управления при следующем перезагрузке страницы), я получаю исключение «Не могу загрузить ViewState». Я предполагаю, что это происходит потому, что ViewState пытается восстановить параметры старого элемента управления и не находит его. Итак, есть ли способ остановить просмотр в представлении от попытки восстановить состояние элемента управления, не существующего?«Невозможно загрузить ViewState» после изменения динамического управления

ответ

1

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

0

Похоже, что состояние выпадающего/добавленного элемента управления не восстанавливается, прежде чем восстанавливать состояние представления. Если у вас есть выпадающее значение по умолчанию, чтобы показать элемент управления X, и пользователь меняет его, чтобы показать управление Y, страница должна добавить элемент управления Y в коллекцию управления до восстановления состояния просмотра.

+0

Это именно то, что я делаю, и я считаю, что это то, что вызывает проблему: контроль Y добавляется перед ViewState восстанавливается, но контроль X не является, bacause он больше не needed.However, то ViewState пытается восстановить состояние управления X, но он не находит этого элемента управления –

+0

Hrm, это сложный вопрос. Было бы трудно догадаться, не увидев полный код и не попытаться запустить некоторые тестовые прогоны, выполняющие жизненный цикл. Вы пробовали просто оставить X, а затем удалить его после восстановления состояния просмотра? – Tejs

+0

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

0

Имеет ту же проблему, в которой был добавлен, изменен и/или изменен пользователем элемент переменной длины элементов управления и может быть изменен во время каждой обратной передачи.

Ответ на удивление простой.

При создании динамического набора управления «EnableViewState = False» перед тем добавить его к страницам управления коллекции. Тогда никакая информация в представлении не сохраняется и независимо от того, сколько динамических элементов управления добавлено или удалено или переназначено, что все остальное будет работать правильно.

Если вы добавляете их динамически, вы обычно устанавливаете все свойства в любом случае, чтобы на самом деле не создавать какую-либо работу в моем случае, которая очень похожа.

+0

Только что понял, что Гленналл ответил, но текст, который он оставил, не очень ясен, поэтому я оставлю это на месте для других. – DarrenMB

0

У меня такая же проблема с управлением сеткой. Я динамически связывал dataviews и, согласно решению DarrenMB, я только что написал EnableViewState = false; и проблема решена.

Infragistics.Web.UI.DataSourceControls.DataView dvMesaj = new Infragistics.Web.UI.DataSourceControls.DataView(); 


     whdsShowMessages.DataRelations.Clear(); 
     whdsShowMessages.DataViews.Clear(); 
     whgridShowMessages.Rows.Clear(); 
     EnableViewState = false; //here is the solution.. 
     whdsShowMessages.DataViews.Add(dvKisi); 
     whdsShowMessages.DataViews.Add(dvMesaj);