Не удалось загрузить viewstate. Случается только изредка. Трудно воссоздать - PullRequest
15 голосов
/ 24 февраля 2009

Подробности ошибки приведены ниже. Эта ошибка возникает только изредка / редко / иногда, и нет никаких шагов, чтобы воспроизвести ее.

Как узнать, какой элемент управления выдает эту ошибку Viewstate?

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

Когда: Редко / Изредка

Шаги для воссоздания: Не могу

Трассировка стека:

System.Web.HttpUnhandledException: Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.Web.HttpException: Failed to load viewstate.  The control tree into which viewstate is being loaded must match the control tree that was used to save viewstate during the previous request.  For example, when adding controls dynamically, the controls added during a post-back must match the type and position of the controls added during the initial request.
   at System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
   at System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState)
   at System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
   at System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState)
   at System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
   at System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState)
   at System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
   at System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState)
   at System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
   at System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState)
   at System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
   at System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState)
   at System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
   at System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState)
   at System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
   at System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState)
   at System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
   at System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState)
   at System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
   at System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState)
   at System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
   at System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState)
   at System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
   at System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState)
   at System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
   at System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState)
   at System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
   at System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState)
   at System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
   at System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState)
   at System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
   at System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState)
   at System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
   at System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState)
   at System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
   at System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState)
   at System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
   at System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState)
   at System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
   at System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState)
   at System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
   at System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState)
   at System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
   at System.Web.UI.Page.LoadAllState()
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   --- End of inner exception stack trace ---
   at System.Web.UI.Page.HandleError(Exception e)
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.ProcessRequest()
   at System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context)
   at System.Web.UI.Page.ProcessRequest(HttpContext context)
   at ASP.sessions_aspx.ProcessRequest(HttpContext context) in c:\windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\73694782\85423fe4\App_Web_mnrmfsfa.8.cs:line 0
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

Ответы [ 9 ]

24 голосов
/ 24 февраля 2009

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

Есть!

Отключить «Просто мой код» в настройках отладки. И перехватить все выброшенные исключения (отметьте «выброшенный» для Common Language Runtime в диалоговом окне, открытом с помощью Ctrl-Alt-E)

После возникновения исключения перейдите к ближайшему фрейму стека, где доступен объект Control, и проверьте его ClientID и его родителей.

12 голосов
/ 24 февраля 2009

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

Это может выглядеть как случайная ошибка, поскольку существуют случаи, когда изменение элементов управления на странице не препятствует загрузке состояния просмотра. Загляните на свою страницу и найдите элементы управления, которые динамически создаются / удаляются. Убедитесь, что все элементы управления добавлены на страницу до состояния просмотра загружено (это было бы до события загрузки страницы).

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

5 голосов
/ 10 февраля 2010

Существует обходной путь для этой ошибки:

Установите для свойства EnableViewstate всех динамически загружаемых элементов управления значение false. Это не полное решение; здесь мы отключаем ViewState элементов управления, чтобы обойти эту ошибку.

Это решение может привести к возникновению других ошибок, поэтому будьте осторожны при применении этого исправления.

4 голосов
/ 24 февраля 2009

Я столкнулся с этой ошибкой, это происходит, когда есть обратный пост кросс-страницы.

Например : вы загружаете View A. View A загружается нормально, по любой причине условия, при которых загружается View A, больше не существуют. Запасной страницей является представление B. Таким образом, пользователь заполняет форму в представлении A и отправляет обратно. Поскольку условия представления A больше не выполняются, значения формы представления A публикуются в представлении B.

2 голосов
/ 27 марта 2011

Это, вероятно, должно сделать это для вас.

http://yakshaver.blogspot.com/2011/03/greatest-viewstate-attribute-to-ever.html

2 голосов
/ 24 августа 2010

У меня была эта ошибка, когда мои пользовательские элементы управления были случайно созданы в Page_Load (). Элементы управления должны создаваться динамически в OnInit ().

0 голосов
/ 07 февраля 2011

У меня возникла точно такая же проблема. У меня было 2 списка на главной странице, связанные с 2 обновленными панелями.

Отключение EnableViewState в Listviews решило это для меня!

0 голосов
/ 13 августа 2009

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

0 голосов
/ 24 февраля 2009

Я видел эту ошибку при использовании gridview. Это могло произойти, когда взаимодействие с пользователем вызвало обратную передачу, прежде чем страница была полностью отрисована.

Я полагаю, что это было исправлено в VS2005 SP1.

...