ViewState はどこに保存されますか? サーバー側またはクライアント側に保存されますか?
いくつかのプロセスのために保存する必要がある巨大なデータがあります。セッションを使用していました。しかし、あるページから別のページに移動すると、セッションをクリアできません。そこで、ViewState を実装することを考えました。しかし、大量のデータで実行するとViewStateがエラーをスローしますか?
どうすればこれを解決できますか?
ビューステートは、エンコードされた形式でページ自体に保存されます。クライアント側でビューステートに直接アクセスすることはできません。クライアント側のコードでこのビューステートから貴重なデータを取得するには、エンコード/デコード アルゴリズムを知る必要があります。
隠し変数を使用して、そのページでのみ使用されるデータを格納できます。非表示の変数は、クライアント側とサーバー側のコードからアクセスできます。
キャッシュまたはセッションを使用して、データテーブル (大きなデータ) を保存できます。ViewState と比較して、優れたパフォーマンスが得られます。
キャッシュは常にマシンのメモリを使用し、セッションは構成されたものを使用します。
Web ファームでは、セッションはローカル (アフィニティが設定されている場合にのみ機能) またはリモート (状態サーバーまたはデータベース、またはカスタム) にすることができますが、キャッシュは常にローカルです。
そのため、DataTable をキャッシュに格納するとメモリが消費されますが、シリアル化は使用されません。
PS: DataTable の代わりに DataSet を保存しても、ほとんど何も変わりません。
ViewState はどちらの側にも保存されません。要求と応答のたびにサーバーとブラウザーの間で送受信されるため、ViewState に大量のデータを格納することはお勧めできません。
ViewState は指定した場所に保存されます。デフォルトでは、これはクライアントに送信されるページの隠しフィールドにあります。
ASP.NET は、指示があれば、ViewState を Session 内、つまりサーバー上に格納することもできます。
ビューステートに大量のデータを保存すると、サイトが遅くなります。前のページの情報全体を保存するのではなく、クエリ文字列を使用して、各ページのデータベースから新しいコピーを取得します。
非表示フィールドの状態情報ストアを表示します。情報は、この隠しフィールドでサーバーとクライアントの間を行き来します。
asp.net コントロールの場合、デフォルトで .net はすべてのコントロールにビュー ステートを実装します。そのため、そのページのボタンをクリックしてもテキスト ボックスの値が失われません。