2008-09-16 10 views
1

私はさまざまなgridviewsを持ついくつかのC#.netページを実行しています。長時間(通常は一晩)Webブラウザーに単独で残しておくと、ページ上の要素をクリックすると次のエラーが表示されます。ViewStateエラーをうまく処理する方法は?

私はこの問題をどこから始めるべきかわかりません。 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プロバイダを提供する場合は、ViewState Provider - an implementation using Provider Model Design Patternを確認してください。

0

また、タイムアウトの長さを知っていれば、あらかじめ設定した時間が経過してもページに何も表示されていない場合、別のページにリダイレクトするJavaScriptを少し追加することができます。これを拡張して、セッション/ページの有効期限が近づいていることを顧客に警告し、そのセッションを延長する手段を提供することができます(javascriptサーバーのコールバックなど)。

2

ViewStateがWebページ自体に文字列として格納されるため、これは奇妙です。だから私は長い時間がどのようにそのエラーを引き起こすかは分からない。おそらく、ページ上の1つ以上のオブジェクトがガベージコレクションされているか、アプリケーションがリセットされているため、ビューステートはアプリケーションの再起動時に作成されたコントロールではなく、古いコントロールを参照しています。

、私はあなたの痛みを感じるいずれにせよ、これらのエラーは、デバッグに楽しいことはありません、と私はおそらく上記の記事は、あなたにいくつかの答えを与えるhow ViewState works

0

を処理するための最も簡単な方法ですグローバルレベルのエラーハンドラを追加すると、アプリケーションレベルで例外が取得され、ユーザーは「セッション終了」ページにリダイレクトされます。

グローバルエラーハンドラの一般的な実装を知りたい場合は、私のウェブサイトで入手可能なものがあります。必要に応じてコードを提供します。http://iowacomputergurus.com/free-products/asp.net-global-error-handler.aspx

関連する問題