15

エラーの詳細を以下に示します。このエラーはたまに/めったに/たまにしか発生せず、再現する手順はありません。

どのコントロールがこのビューステートエラーをスローしているのかをどうやって知ることができますか?

エラーメッセージ:ビューステートのロードに失敗しました。ビューステートがロードされるコントロールツリーは、前のリクエスト中にビューステートを保存するために使用されたコントロールツリーと一致する必要があります。たとえば、コントロールを動的に追加する場合、ポストバック中に追加されたコントロールは、最初のリクエスト中に追加されたコントロールのタイプと位置と一致する必要があります。

いつ:めったに/たまに

再作成する手順:できません

スタックトレース:

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

9 に答える 9

24

残念ながら、コントロール階層に正しく追加されていない有罪のコントロールがどれであるかを正確に確認する方法はありません。

がある!

デバッグ設定で「Justmycode」を無効にします。そして、スローされたすべての例外をキャッチします(Ctrl-Alt-Eで開いたダイアログで共通言語ランタイムの「スロー」をチェックします)。

例外が発生した後、Controlオブジェクトが使用可能な最も近いスタックフレームに移動し、そのClientIDと親を調べます。

于 2009-02-24T07:55:58.133 に答える
13

より一般的には、このエラーは、フレームワークがビューステートをロードできないようにページのコントロール階層が変更された場合に発生します。ビューステートメカニズムは、ロード時のコントロール階層が保存時と同じであると想定しています。

ページ内のコントロールを変更してもビューステートの読み込みが妨げられない場合があるため、これはランダムエラーのように見える場合があります。ページを見て、動的に作成/削除されるコントロールを探します。ビューステートがロードされる前(つまり、ページのロードイベントの前)に、すべてのコントロールがページに追加されていることを確認してください。

残念ながら、コントロール階層に正しく追加されていない有罪のコントロールがどれであるかを正確に確認する方法はありません。このエラーを確認する一般的な方法は、イベントにいくつかの動的コントロールを追加することです(たとえば、ドロップダウンで選択したインデックスが変更された場合)-この方法で状態がビューの状態に保存されますが、ポストバックで再度追加することはありません-このようにビュービューステートがロードされるとコントロールが存在しなくなるため、ステートは無効です。

于 2009-02-24T07:43:50.377 に答える
5

このエラーには回避策があります。

動的にロードするすべてのコントロールの EnableViewstate プロパティを false に設定します。これは完全な解決策ではありません。このエラーを回避するために、ここでコントロールの ViewState を無効にしています。

この解決策により、他のエラーが発生する可能性があるため、この修正を適用するときは注意してください。

于 2010-02-10T09:38:58.823 に答える
4

このエラーが発生しました。クロスページのポストバックがある場合に発生します。

:ビューAをロードします。ビューAが正常にロードされます。何らかの理由で、ビューAがロードされた条件は存在しなくなります。フォールバックページはビューBです。したがって、ユーザーはビューAとポストバックのフォームに入力します。ビューAの条件が満たされないため、ビューAのフォーム値がビューBに送信されます。

于 2009-02-24T06:50:19.553 に答える
2

カスタム コントロールが Page_Load() で誤って作成されたときに、このエラーが発生しました。コントロールは、OnInit() で動的に作成する必要があります。

于 2010-08-23T20:41:38.407 に答える
2

これはおそらくあなたのためにそれを行うはずです。

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

于 2011-03-27T14:11:24.147 に答える
0

ページが完全に読み込まれる前にページを停止し、ポストバック送信することで、おそらくこれを再現できます。サーバーがサーバーから完全なビューステートを取得できなかった場合、ポストバックで再作成できないため、クラッシュします。

于 2009-08-13T04:32:46.970 に答える
0

まったく同じ問題が発生しました。2 つの更新されたパネルに関連付けられたマスター ページに 2 つのリストビューがありました。

Listviews で EnableViewState を無効にすると解決しました。

于 2011-02-07T10:57:54.857 に答える
0

グリッドビューを使用しているときにこのエラーが発生しました。ページが完全にレンダリングされる前に、ユーザーの操作によってポストバックが発生した場合に発生します。

ただし、VS2005 SP1 で修正されたと思います。

于 2009-02-24T19:25:17.507 に答える