23

セッションに依存せず、ポストバック間の永続化のためにビューステートに依存する aspx ページがあるとします。

ユーザーがこのページにアクセスしていて、長いランチに出かけた場合、彼が戻ったときにビューステートはまだ有効ですか?

4

12 に答える 12

14

Viewstate 自体は期限切れになりません。フォームに戻されるので、いつでも再構成できます。

MSDN によると、 「セッションの有効期限内にページがポストバックされない場合、ビュー ステートが期限切れになる可能性があります」。したがって、ラウンドアバウトの方法では、セッションが期限切れになると期限切れになる可能性がありますが、viewstate は直接期限切れになりません。とにかくセッション状態を使用していないので、暗黙の有効期限について心配する必要はありません。

期限切れとは言っていないことに注意してください。それは、 ViewState の制御というタイトルの記事で引用した MS でした。

于 2008-10-24T14:49:13.927 に答える
9

PostBack プロセスの一部として保持される ViewState はありません。ただし、必要に応じて、Page クラスの SavePageStateToPersistenceMedium() および LoadPageStateFromPersistenceMedium() をオーバーライドして、その動作を実装できます。詳細については、ASP.NET ViewState についてを参照してください。

ページの ViewState はセッションに保存されるため、セッションの有効期限が切れると、ViewState が失われることに注意してください。これが ViewState の有効期限が切れるとは言いませんが、はい、セッション タイムアウト後に破棄されます。

于 2008-10-24T14:48:06.253 に答える
5

はい、ViewState は特定の条件で期限切れになります。たとえば、iframe:s を使用している場合や、サーバーへの「ライブ」接続を定期的なポストバックで維持している場合などです。次に、このオプションを調査することをお勧めします:<sessionPageState historySize="9"/>これは、セッションに保存される「ポストバック結果」の数を実際にハードコーディングします (SessionPageStatePerster が使用されている場合)。各ポストバックは、ViewState を Session["__VIEWSTATEQUEUE"] のキューの最後に格納し、「古すぎる」ViewState を削除します。そして、SessionPageStatePerster がどの ViewState が古すぎるかをどのように判断すると思いますか.. web.config で任意の historySize-constant を構成することによって.. この問題を見つけるのは永遠に難しすぎます... asp.netプログラミングに対する私の憎しみは、今では言葉では言い表せません..grrr ...

于 2011-03-21T12:24:56.233 に答える
5

Viewstate は期限切れになりません。

ビューステート データはすべてクライアントに保存され、ユーザーがポストバックを実行するとサーバーに送信されます。

これには非常に興味深い意味合いがあり、ここで詳しく説明されています。

于 2008-10-24T14:51:14.390 に答える
5

また、落とし穴として、既定では、ASP.NET は自動生成されたキーで ViewState を暗号化します。これは、web.congif ファイルの MachineKey 要素でオーバーライドできます。ViewState の有効期限が切れることはありませんが、別の自動生成されたキーを使用して ViewState を復号化すると (IIS のリセット後、アプリケーションの再デプロイ後、Web ファーム内の別のサーバーへのヒット後など)、ViewState が無効になる可能性があります。ビューステートを長期間保存することを計画している場合は、暗号化/復号化の方法に注意してください。

http://msdn.microsoft.com/en-us/library/ms998288.aspx

于 2008-10-24T14:58:31.287 に答える
2

Viewstate は、それらがまだページ上にある限り有効期限が切れることはなく、引き続き存在し、機能します。

于 2008-10-24T14:49:44.470 に答える
2

ViewState は POST から POST まで保持されます。実際には、フォームの非表示フィールド内に保存されるため、常にサーバーに POST されます。

セッションに依存していない限り、ページの状態を再構築するのに問題はないはずです。ただし、必要に応じてページの状態コードをテストするのは簡単です。web.config で 60 秒後にセッションが期限切れになるように設定し、ページをロードして 1 分以上待ちます (Stack Overflow に移動して、いくつかの質問に答えます)。次に、ページ上のボタンをクリックします。

于 2008-10-24T14:54:17.487 に答える
1

ViewState は、ページ自体の隠しフィールドに保持されます。したがって、ユーザーがページを持っている限り、彼は ViewState を持っています。ただし、アプリが一定期間後にユーザーを自動的にログアウトする場合、ViewState を保持したままにしておくと、ユーザーにとって何の役にも立たない可能性があります。

于 2008-10-24T14:51:46.400 に答える
1

デフォルトでは、Viewstate は非表示の入力として html コンテンツに含まれています。つまり、有効期限が切れることはありませんが、viewstate のすべてをユーザーのブラウザーからアップロードする必要があります。これは通常、パブリック サイトの接続の最も遅い部分であるため、viewstate に多くのものを配置すると、すぐにサイトが非常に遅く見えることがあります。

于 2008-10-24T14:51:51.317 に答える
1

短い答えは次のとおりです。いいえ。

より長い答えは、ViewState ストレージの実装に依存します。一定時間後に有効期限が切れる ViewState のカスタム実装を提供できます。たとえば、ViewState をデータベースまたはディスクに格納し、非表示フィールドに格納された値への参照のみを送信できます。その後、バッチ処理を使用して、古い ViewState データを削除したり、要求に応じて有効期限を実行したりできます。

于 2008-10-24T14:51:53.873 に答える