viewstateに値を格納することについて多くの質問がありましたが、良い答えが見つかりませんでした。viewsの代わりにセッション
データベースから大量のデータを取得すると、状況が発生します。それから、私のニーズに応じてデータをフィルタリングして操作します(それで、重度のプロセスです)。次に、結果をカスタムクラスのリストの中に入れます。たとえば、このクラスは人
List<Person> persons = new List<Person>();
private void FillPersons()
{
//Call to webservice
persons = ws.GetPersonsList();
//Do all kind of custom filtering
//Manipulate the data
}
になります言うことができます今、全体FillPersons()
方法は、データのかなり少量を返す重い処理です。残念ながら、それはSQLに移動することはできませんし、重さは進行中ですが、それはポイントではありません。
ポイントは、このデータをポストバック間のページで再利用する必要があることです。 今すぐFillPersons()
への追加呼び出しを惜しまないために、私はPersonizeクラスをserializeableとしてマークし、viewstateのためにページが1MBのサイズになるという事実以外はviewstateにリストを格納します。私が読んだところによると、それは安全ではなく、ページを重くするようなソースコードを吹き飛ばします(二番目は私が気になるものです)。
私はセッションを残しています。しかし、セッションはポストバックの間だけではなく、それ以降も永続化されます。または、最悪の場合、ユーザーがポストバックを決定する前にセッションが終了します。したがって、セッションの存続期間に最適な期間を見つけることは不可能です。
私の質問は、ポストバックの間に "データセット"を再利用するベストプラクティスですか? あなたはそのような場合に何をしますか?
ありがとうございました。
PS:隠しフィールドなどはオプションではありません。
を使用してリストを取得することができます全体または上のフィルタ処理された、この人のリストアプリケーションです現在ログインしているユーザーですか? – Magnus
最初に取得した後、他の場所、つまりフィルタリングされたデータセットを永続させることはできますか?そうであれば、それを一意のキーとともに保存し、そのキーのみをクライアントに送ることができます。 – GemCer
キャッシュデータを保存した一時データベーステーブルはどうですか? – Holystream