2009-02-24 126 views
15

エラーの詳細を以下に示します。このエラーは時折/まれに/時には発生するだけであり、それを再現するための手順はありません。ビューステートの読み込みに失敗しました。時折のみ起こる。

どのControlがこの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) 
+0

これはウェブファームで実行していますか? Webアプリケーションが複数のWebサーバーにインストールされている場所私は、マシンキーがIISのメタベース内で同じでなければならないと聞いてきました。 – jwalkerjr

+0

しかし、実際にはエラーは「ViewStateの復号化に失敗しました」と表示されます...これらの行に沿った何か... –

+0

このエラーは、私のローカルコンピュータではまったく起こりません(Windows Server 2003) –

答えて

4

私はこのエラーを経験したクロスがあった場合、それが起こる

ページのポストバック。

たとえば、:View Aをロードします。View Aは、View Aがロードされた条件が存在しなくなったため、何らかの理由で正常にロードされます。フォールバックページはビューBです。ユーザーはビューAとポストバックのフォームを完了します。ビューAの条件はもはや満たされないため、ビューAのフォーム値はビューBに転記されます。

12

このエラーは、ページのコントロール階層が変更されたときに発生します。は、 。ビューステートメカニズムは、コントロール階層が保存されたときと同じロード時に同じであることを前提としています。

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

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

+0

これは、基になるデータが変更されたときに、データバインドされたコントロールでよく使用されます。 –

24

Unfortunately there is no way to see which exactly is the guilty control that is not added correctly to the control hierarchy.

あります!

デバッグ設定で「自分のコードだけ」を無効にします。そして、スローされた例外をすべてキャッチします(Ctrl + Alt + Eで開いたダイアログでCommon Language Runtimeの 'throw'をチェックします)。

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

+4

誰かを助けるかもしれない Visual Studio 2005で「Just My Code」を無効にする方法 http://www.johnlamansky.com/blog/how-to-disable-just-my-code-in-visual-studio- 2005/ –

+0

なぜこれを行う方法を見つけられなかったのですか? ありがとうございます! – TweeZz

+1

[これと](http://msdn.microsoft.com/en-us/library/dd264988.aspx)は2013年のためのものです –

0

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

しかし、私はそれがVS2005 SP1で修正されたと信じています。

0

おそらく、ポストバックを提出し、それが完全にロードされる前にページ、およびその後、を停止することでこれを再現することができます。サーバーがサーバーから完全なviewstateを取得できなかった場合は、ポストバック時に再作成できないため、クラッシュします。 falseにすべての動的ロードのコントロールの

設定EnableViewStateプロパティ:

5

は、このエラーの回避策があります。これは完全な解決策ではありません。このエラーを回避するためにここのコントロールのViewStateを無効にしています。

この解決方法では、他のエラーによって頭が上がる可能性があるため、この修正プログラムを適用する際には注意が必要です。

+0

これはクルージングを感じるかもしれませんが、ViewStateが "ブラウザーをPostBackの新しいページにリダイレクトするときなど、適用されません。 –

2

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

+0

まったく100%。これで問題が解決しました。 –

+0

勝利のためのビューステートのダイナミックコントロール! – JJS

0

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

ListViewsでEnableViewStateを無効にすると、私のために解決されました!

関連する問題