たとえば、複雑なオブジェクトを編集するための一連のウィザードページのようなWebアプリケーションが実装されているとします。ユーザが「Finish」ボタンをクリックするまで、オブジェクトはバックエンドシステムに保存されません(要件)。その間、何らかのセッション状態のオブジェクトに関するすべての情報を保持する必要があります。ASP.NET MVC:ウィザードのようなアプリケーションでセッション状態を維持するためのベストプラクティス
また、一部のウィザードページでは、潜在的に多数のアイテムを含むコンボボックスやリストボックスを表示する必要があります。これらの項目は、Webサービスを使用してバックエンドシステムからフェッチされます。
このウィザードでは、ウィザードのページからフォームの上にあるタブのリンクを使用して自由にジャンプすることができます。そのため、単純な「次の、次の...終了」というものではありません。
追加の制約:WebアプリケーションはWebファーム上で実行され、顧客はサーバー側のセッション状態を使用しています。セッション状態のサイズを最小限に抑えたい場合(彼らは過去にこの問題を抱えていました)の最良の場合です。
だから、基本的に2つの問題がここにあります
- どのように/どこウィザードでユーザーが入力したデータを保持するには?
- バックエンドから受け取ったコンボ/リスト項目をキャッシュするかどうか、もしそうなら、どこで?
オプション私が検討している:
は(HTMLページにそれをシリアル化)WebフォームのようなのViewStateでオブジェクトを格納します。これにはコンボボックスの項目も含まれます。明らかに、HTMLページが非常に大きくなり、Webアプリケーションが遅くなるという問題が生じる可能性があります。 サーバー側のセッション状態にかかわらず、顧客の要望のそれは(後半プロジェクト内の)実際のWebファーム上でテストされるまで、パフォーマンスが影響を受けることになりますか知らずにそれを保存する
。
私は2つの間で決めることができません。それとも別の選択肢がありますか?
セッション状態のルートに移動する場合、カスタムモデルバインダーを作成し、そのオブジェクトをコントローラのアクションメソッドに渡します。 – RichardOD
それは私が今遊んでいるものです。実際には、ビューモデルと同じモデルを使用してビューコードでシリアル化することを考えています。モデルバインダーを使用してそれを逆直列化します。意味がありますか? –