質問

コントロールを動的に追加するページを用意します。データベースからコントロールの状態が取得され、ポストバック時にコントロールがページに再追加されます。ユーザーはUIを介してコントロールを追加/削除できます。 2人のユーザーが同じページにいて、1人がコントロールを追加/削除すると、他のユーザーは次にコントロールの状態を変更しようとするとViewStateエラーが発生します。

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

これは、ページが描画されるときに1つのコントロールセットを使用し、コントロールの状態が異なるユーザーによって変更されたため、ポストバックで異なるコントロールセットを取得するためです。

エラーとその原因を理解していますが、ここで何かが欠けていると思います。コントロールを動的に追加し、コントロールの状態を変更する同時ユーザーを処理できるページを作成する方法はありますか?

役に立ちましたか?

解決

現在のユーザーの状態を、マスター状態またはグローバル状態から分離する必要があります。ポストバックでは、データベースのマスター定義に基づいてコントロールツリーを構築する代わりに、現在のユーザーに固有のキャッシュされたコントロールツリーをロードします。 ViewStateの再構築を終えたら、調整プロセスを開始します-自動であるか、ユーザーが参加できるように別のUIを読み込む必要があるかどうかは、質問の範囲外です。

ポイントは、「ブランチ」を維持する必要があるということです。ユーザーごとにマスターを変更し、より制御された方法でコミットして読み取ります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top