1

私は新しい会社にいて、Webアプリ(.Net / 4.0)のウィザードを作成しています。ユーザーは、ウィザードプロセス中にいくつかの個別の画面に移動し、ウィザードが完了する前に元の画面に戻る必要があります。これは、彼らが通常これを行う方法とは異なります。しかし、これが行われるべき方法です。

1つのオプションは、各パネルの結果をDBのメイン画面に保存することです。したがって、ユーザーが離れてリダイレクトしたとき。クエリ文字列をチェックしてからデータリーダーを呼び出し、元の値を適切に入力できます。

私が選択したオプション:オブジェクトを作成し、ユーザー入力の結果をそのオブジェクトに保存しています。ユーザーが離れてリダイレクトするときは、クエリ文字列で確認し、BOで制御値を入力します。

オブジェクトをに保存しHttpContext.Current.Session.Item("BO")て呼び出しています。

私の質問は、これを行うのは悪い方法ですか?そうでない場合は、ユーザーがウィザードを終了したときに、オブジェクトがセッションから削除されるようにするために何をしたいのでしょうか。それが悪い場合、あなたはどうしますか?私は建設的な批判を恐れていません、私はこれで新しいです。

4

2 に答える 2

2

Sessionオブジェクトを使用してこのようなことをしました。パフォーマンス(シリアル化)などに関しては、ケースバイケースで言う必要があります。カスタムクラスが大きく、他の複数のカスタムクラスが含まれている場合は、シリアル化が役立つ可能性がありますが、比較的小さく、含まれているのはプリミティブデータ型の場合、シリアル化はおそらく過剰になり、すぐに逆効果になります。

オブジェクトがセッションにとどまる時間を制御する限り、ウィザードを完了するには、スタートページやコントローラーページ、またはそれを呼び出したいものに戻る必要があるとあなたは言いました。したがって、[保存]または[完了]をクリックすると、保存関数の最後に次のような行を含めることができますSession("BO") = nothing(またはSession.Remove("BO")同じことを実行します)。これにより、オブジェクトがSessionコンテナから解放されます。ウィザードを完了する前にページから移動したときにセッションをクリアしたい場合は、もう少し面倒になる可能性があります。接続の喪失やタイムアウトなどについては、

しかし、私が過去に行ったことを心配する代わりに、ウィザードが起動するたびに、Session使用する予定のメンバーがまだ存在しない場合はそれをクリアしてからnothing、新しいオブジェクトで再作成するようにします。

Sessionアプローチまたはアプローチの唯一の問題viewstateは、どちらも特に安全ではないため、機密データを処理する場合は、に格納されている値を暗号化することをお勧めしますSession

この記事は、私が最初にキャッシュオブジェクトとセッションオブジェクトを使い始めたときに役立ちました。 ASP.NETでのキャッシュ管理

于 2012-06-14T15:59:32.300 に答える
1

ウィザードがすべて同じページにあり、ポストバックしてウィザードの各画面に移動する場合は、ビューステートを使用してこれを実現できます。これにより、ユーザーがウィザードを終了した場合でも、オブジェクトがセッションに残っている可能性があります。

ビューステートについては、msdnに関する次の記事を参照してください。ASP.NET ビューステートの概要

ビューステートを使用して、ページに固有のアプリケーションデータを保存することもできます。

ただし、ビューステートを使用する際の注意点がいくつかあります。状態管理のために、非常に大量のデータをユーザーのブラウザーにパイプダウンする必要はありません。ビューステートに格納されているクラスもシリアル化可能である必要があります。msdnの記事を引用する:

ビューステート情報はXMLにシリアル化され、base-64エンコーディングを使用してエンコードされます。これにより大量のデータが生成される可能性があります。ページがサーバーに投稿されると、ビューステートのコンテンツがページ投稿情報の一部として送信されます。ビューステートに大量の情報が含まれていると、ページのパフォーマンスに影響を与える可能性があります。アプリケーションの一般的なデータを使用してページのパフォーマンスをテストし、ビューステートのサイズがパフォーマンスの問題を引き起こしているかどうかを判断します。

...クラスはSerializable属性を使用してコンパイルする必要があります。これにより、その値をビューステート用にシリアル化できます。

ビューステートを使用する代わりの方法については、msdnで次を参照してください。ASP.NET 状態管理の推奨事項

于 2012-06-14T13:01:17.890 に答える