2008-09-16 5 views
1

Я запускаю некоторые страницы C# .net с различными gridviews. Если я когда-нибудь останусь один из них в веб-браузере в течение длительного периода времени (обычно в одночасье), я получаю следующую ошибку при нажатии любого элемента на странице.Как грациозно обрабатывать ошибки ViewState?

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

Error: The state information is invalid for this page and might be corrupted. 

    Target: Void ThrowError(System.Exception, System.String, System.String, Boolean) 

    Data: System.Collections.ListDictionaryInternal 

    Inner: System.Web.UI.ViewStateException: Invalid viewstate. Client IP: 66.35.180.246 Port: 1799 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9) Gecko/2008052906 Firefox/3.0 ViewState: (**Very long Gibberish Omitted!**) 

    Offending URL: (**Omitted**) 

    Source: System.Web 

    Message: The state information is invalid for this page and might be corrupted. 

    Stack trace: at System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError) at System.Web.UI.ClientScriptManager.EnsureEventValidationFieldLoaded() at System.Web.UI.ClientScriptManager.ValidateEvent(String uniqueId, String argument) at System.Web.UI.Control.ValidateEvent(String uniqueID, String eventArgument) at System.Web.UI.WebControls.DropDownList.LoadPostData(String postDataKey, NameValueCollection postCollection) at System.Web.UI.WebControls.DropDownList.System.Web.UI.IPostBackDataHandler.LoadPostData(String postDataKey, NameValueCollection postCollection) at System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad) at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 

ответ

1

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

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

Проверьте, ViewState Provider - an implementation using Provider Model Design Pattern для предоставления пользовательского поставщика Viewstate.

0

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

2

Это странно, поскольку ViewState хранится как строка на самой веб-странице. Поэтому я не вижу, как длительный период времени приведет к этой ошибке. Возможно, один или несколько объектов на странице были собраны мусором или сброшены приложение, поэтому в представлении видятся ссылки на старые элементы управления, а не элементы управления, созданные при перезапуске приложения.

В любом случае, я чувствую вашу боль, эти ошибки никогда не приятно отлаживать, и у меня нет простого ответа о том, как найти проблему, кроме, возможно, изучая how ViewState works

0

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

http://msdn.microsoft.com/en-us/library/aa479319.aspx

http://msdn.microsoft.com/en-us/library/h0hfz6fc.aspx

0

Другим вариант для добавления в глобальный обработчик ошибок, который бы захватил исключение на уровне приложения и перенаправил пользователя на страницу «Истекшее сеанс».

Если вы хотите идею общего осуществления глобального обработчика ошибок, у меня есть один доступный на моем сайте, я могу дать вам код, если это необходимо - http://iowacomputergurus.com/free-products/asp.net-global-error-handler.aspx

Смежные вопросы