2

ページで Viewstate の読み込みの問題に直面しています。

ページには、管理者および非管理者ユーザーにログインするためのログイン機能があります。管理者以外のユーザーがページにログインし、自動ポストバックが有効になっているチェックボックスをクリックすると、奇妙な動作が発生します。(エラーの詳細は以下に記載されています)

後で、左側のナビゲーションパネル(リンクをホストする)でそれを見つけました

サイドバーは下図のようなものです

Security
---------
Link1
Link2
Link3

Configuration
---------
Link1
Link2

「構成」セクションの下にそれ以上のものがある場合、この例外がスローされます。リンクは、Page_Load に対するユーザーの権限に基づいて (完全なリストから) 動的に削除されます。

この種の問題を追跡するにはどうすればよいですか? Visual Studio ですべての例外を有効にしましたが、どのコントロールがこの問題を引き起こしているかを確認するのに問題はありませんか?

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

[HttpException (0x80004005): 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.]
   System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +380
   System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +144
   System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +214
   System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +144
   System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +214
   System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +144
   System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +214
   System.Web.UI.Page.LoadAllState() +464
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1729
4

1 に答える 1

0

この記事のページ サイクルを見ると、viewstate がページの読み込み前に読み込まれ、レンダリングの前に保存されていることがわかります。ビューステートの読み込み後のページ読み込みでコントロールを削除しています。つまり、ポストバック時に、ページが期待するよりもビューステートのデータが少ないことを意味します。ビューステートの保存後に発生する prerender のコントロールを削除してみてください。これで問題が解決するはずです。

ジェームズ:-)

于 2013-04-10T09:57:17.657 に答える