C# で収集して Gridview にバインドできるように、Datatable を別の .aspx ページに転送する最良の方法は何ですか?
- クッキー?
- セッション?
- キャッシュ?
アプリケーションの構造と転送するデータの塊のサイズに依存するため、単一の「最適」というものはありません。また、どちらかの端で何をしているかによっても異なります。
最も基本的なレベルでは、答えはセッション状態にあります。(一般化して) 移動したいデータの塊が大きすぎるため、Cookie は不適切です。キャッシュは、物事をリロードする必要がないようにするためにありますが、(再び一般化して)セッションに戻るために戻って見るときにそこにある必要があるものには使用しないでください。
もちろん、それはあなたがデータテーブルをまったく保持していることを前提としています。これを行うもう1つの方法は、ストアからデータテーブルを取得できるようにするキー値を維持することです。つまり、最初のページでテーブルを1回ロードし、何かを行い、キー値を永続化して2 ページ目で、ストレージからデータテーブルをリロードし、必要に応じて更新を行います。これは概念的にはより優れたモデルです (オーバーヘッドまたはセッションへのテーブルのシリアライズ/デシリアライズと、データストアからのデータのプルとの間のトレードオフ、そしてもちろんデータストアとアプリケーションの間のトレードオフは、データをキャッシュする適切な機会です)。セッションまたは、必要に応じて、セッションへの依存から解放される Cookie を使用できます。
私が言うように、単純で実用的な答えはセッションにありますが、オーバーヘッドと、これがあなたに課す他の制約を認識する必要があります。
クッキー - 絶対にありません。セッション - おそらく、ユーザー数/サーバーの負荷によって異なります。キャッシュ - 多くのユーザーが同じグリッドを表示しない限り (つまり、データがキャッシュされることを保証する)、おそらく良い考えではありません。
他のページに情報を提供して、そのページがグリッドビュー自体のデータを取得できるようにすることはできませんか? おそらくクエリ文字列パラメーターと同じくらい簡単なもの、たとえば productId=10?
ASP.NET でのクロス ページ ポスティングについてもお読みください。
他のページへのリダイレクトを実行する場合Session
は、良い場所です。しかし、DataTable
再作成するのにそれほど費用がかからない場合は、おそらく新しいクエリをデータベースに送信します。
クロスページ ポスティングは、DataTable を保持するプロパティを公開することによって実行できることの 1 つです。別のオプションは、再実行するのにコストがかかりすぎない場合、次のページでデータテーブルを再設定することです。キャッシュとセッションは高価になると思います。Cookie は、すべてのものをクライアントに公開するため、間違いなくオプションではありません。
データテーブルの内容によって異なります。
すべてのデータをクライアントに転送して戻す必要があるため、Cookie を除外します (DataTable の場合、多くのレコードを持つことができると推測します)。
セッションとキャッシュはどちらも機能しますが、おそらくユーザーがセッションをアクティブにしている限り、セッションがメモリに保存されることを考慮してください。
クエリの実行に時間がかからない場合は、もう一度実行することを検討します。
ViewState でシリアル化できます。
セッションが最良のオプションになります。