3

プロジェクトのビューを切り替えるために、ユーザーコントロールを動的に読み込んでいます。ポストバックごとにユーザーコントロールをリロードする必要があることを認識しています。奇妙なことに、コントロールがなくなっても、コントロールのビューステートは維持されますか?ロードしたパネルが空であることを確認してから、ビューの状態を確認し、値がそこにあることを確認します。

奇妙なことに、別のコントロールをロードすると、前のコントロールのビューステートが表示されます。チェックしたところ、動的にロードされたコントロールからページにビューステートが表示されません。その逆も同様です。これにより、ユーザーコントロールは独自のページとして扱われると思います。紛らわしいのは、ロードした2番目のビューが最初のビューから値を表示できる理由と、コントロールが消えたのに値が存在する理由です。

また、コードのこのセクションは役に立たないと思います。なぜコントロールを削除するのですか?パネルは常に空です(コードはTelerikからのものです):

string controlId = LatestLoadedControlName.Split('.')[0];
Control previousControl = pnlControlPlaceholder.FindControl(controlId);
if (!Object.Equals(previousControl, null))
{
   this.pnlControlPlaceholder.Controls.Remove(previousControl);
}

私はいくつかの投稿を見て、ほとんどの場合、ポストバックごとにビューステートが失われると言っていますが、これは私には当てはまりません。おそらく、更新パネルを使用しているためです。最初のリクエストがイベントを処理してから同じコントロールを再度リロードすると、ビューステートは失われます。次のポストバックでのみビューステートを保持しているようです。

ユーザーコントロール間でビューステートを共有するというこの奇妙な動作や、コントロールが失われたにもかかわらずなぜそこにあるのかを誰かが説明できますか?

4

1 に答える 1

0

どうやら、2つのシナリオでページ間のビューステートを読み取ることができます...クロスページポストバックとServer.Transferを使用する場合。クロスページのポストバックシナリオは、私が見ているものを説明すると思います。

于 2012-07-20T18:27:07.217 に答える