2

さまざまなグリッドビューでいくつかの c# .net ページを実行しています。それらのいずれかを Web ブラウザーに長時間 (通常は一晩中) 放置した場合、ページ上の要素をクリックすると、次のエラーが表示されます。

問題の処理をどこから始めればよいかよくわかりません。ビューステートの有効期限が切れた場合にページをリセットしてもかまいませんが、エラーをスローすることは受け入れられません!

  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)
4

5 に答える 5

2

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

いずれにせよ、私はあなたの痛みを感じています.これらのエラーは決してデバッグするのが楽しいものではありません.ViewStateがどのように機能するかを調べる以外に問題を見つける方法について簡単な答えはありません.

于 2008-09-16T15:18:07.023 に答える
1

ビューステートをデータベースに保存し、必要な期間内にのみクリーニングすることで、このエラーを完全に取り除くことができます。これにより、比較的小さなビューステートを使用している場合でも、ページのパフォーマンスが大幅に向上します。

少なくとも、Page クラスから継承し、有効期限が切れているかどうかを確認してデフォルト状態をリロードする独自の ViewStateLoad ルートを追加できます。

ViewState プロバイダーを確認してください -カスタム Viewstate プロバイダーを提供するためのプロバイダー モデル デザイン パターンを使用した実装です。

于 2008-09-16T15:12:13.043 に答える
0

もう 1 つのオプションは、グローバル エラー ハンドラーを追加することです。これにより、アプリケーション レベルで例外がキャプチャされ、ユーザーが "Session Elapsed" ページにリダイレクトされます。

グローバル エラー ハンドラの一般的な実装のアイデアが必要な場合は、私の Web サイトで入手できます。必要に応じてコードを提供できます - http://iowacomputergurus.com/free-products/asp.net-global-エラーハンドラ.aspx

于 2008-09-16T21:35:03.527 に答える
0

または、タイムアウトの長さがわかっている場合は、ページに JavaScript を少し追加して、事前に設定した時間の経過後にページでアクティビティがなかった場合にユーザーを別のページにリダイレクトすることもできます。次に、これを拡張して、セッション/ページの有効期限が近づいていることを顧客に警告し、それを拡張する手段 (JavaScript サーバー コールバックなど) を提供できます。

于 2008-09-16T15:17:04.700 に答える
0

上記の投稿は、問題の解決に関するいくつかの回答を提供します。とりあえず醜いエラーを処理するだけなら、カスタム エラーはすべての「醜い黄色のエラー」を適切に処理する最も簡単な方法です。

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

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

于 2008-09-16T15:44:16.647 に答える