0

キャッシュ内の値を参照するいくつかのプライベートフィールドを持つ複合コントロールがあり、これらのプライベートフィールドはコンストラクターメソッド中に呼び出されます。文字列キーはキャッシュ内の値を識別するために使用されるため、コントロールがインスタンス化されたときに使用できるようにその文字列キーを保存する方法が必要であり、それを参照できる必要があります。変更せずにポストバック。

また、このキーはコントロールが最初にロードされたときに生成されますが、それ以降は再度変更しないでください。

どうすればこれを達成できますか?

すでにビューステートに保存しようとしましたが、コントロールがインスタンス化された時点ではビューステートがまだ使用できないため、機能しません。

プライベートフィールドを使用して、コンストラクターでPage.IsPostbackをチェックしようとしましたが、ポストバックでない場合はプライベートフィールドに値を割り当てますが、その後のポストバックでは値が失われ、再割り当てできません。これは自動生成されたGUIDであるため、Page.IsPostBackに再度表示されます。

これは、人々が以前にやらなければならなかったことでなければなりません。

4

3 に答える 3

0

セッションを試しましたか?

ポストバック間で値/オブジェクトを維持しながら、特定のユーザーのセッションオブジェクトに好きなものを保存できます。

サーバーごとではなくグローバルベースで保存する場合は、アプリケーションを試してください

于 2010-10-29T20:00:57.660 に答える
0

コントロールの構築中に利用できる状態情報はまったくないため、これは難しい場合があります。キャッシュされた情報にアクセスするコードをコントロールのInitイベントに移動できない理由はありますか?

保存されている情報はその特定のリクエスト/ポストバックに関連しているため、Sessionを使用できないと思います。その要求に固有でない場合は、Sessionを使用する可能性がありますが、ライフタイムの非常に早い段階で制御状態を処理しようとすると、他の問題が発生する可能性があると思います。


他の答えへのあなたのコメントを見た後; キャッシュされたデータソースをチェックするコードを、コントロールのInitイベントまたはLoadイベントに移動できるはずです。これにより、状態が利用可能になります。

また、ちなみに; このデータを本当にキャッシュする必要がありますか?その結果、サーバーのメモリを大量に消費する可能性があります。

于 2010-10-29T20:01:08.273 に答える
0

これは最善の解決策ではありませんが(ライフサイクルモデルに合うようにロジックを再配置するのが一般的です)、リクエストに直接アクセスしてみましたか?私はかつて、ライフサイクルの非常に早い段階で選択した値をDropDownListから取得して、建物内のいくつかの要素を調整できるようにしたかったのですが、次のようにしました。

myDropDownList.SelectedValue = Page.Request.Form[myDropDownList.UniqueID];

したがって、ビューステートがサーバー側プロキシの値をロードするのを待つ代わりに、ポストで渡されたクライアント側の制御値から自分で取得しました。そのページを再設計した場合は、おそらく別のことをするでしょうが、今のところうまくいったようで、私が抱えていた問題は解決しました。

于 2010-11-08T16:15:33.813 に答える