さまざまなシナリオで多くのユーザー コントロールをレンダリングするサイト (実際にはアプリケーション ビルダー) があります。
ある日、マネージャーOutput cache
はメインページに追加することを決めました.
OK、すべて問題なく、リクエストは非常に迅速に応答しました!
しかし一方で、このキャッシングにはいくつかの問題があります。
InsertForm User control
いくつかのエンティティを埋めた と、エンティティのリストを表示する があると仮定するとListForm User Control
、何が起こるか推測できます。エンティティは正しく埋められているのに、リストに表示されていません。なぜでしょうか? 出力キャッシュのためです。
次に、このユーザー コントロールをキャッシュから除外する必要があります。検索の結果、Donut Cachingが見つかりました。
動的にサーバー コントロールを Substitution に追加します。
ほとんどのユーザー コントロールの実装は、すべてのページ ライフ サイクルに依存します。一部はInitで実行され、一部はLoadで実行され、一部はRenderで実行されるため、ほとんどのシナリオではプレース ホルダーがあり、次のようにします。
PreRender では、重複を防ぐために placeHolder からすべてのコントロールを削除します。
場合によっては良い結果が得られますが、一部の実装では再び問題がRequest
発生します。また、バインド イベントでは、ウィザードの次のボタンのクリック イベントのように、イベントが正しくバインドされないという問題が再び発生します。HttpContext.Current.Request
Session
Wizard
Request does not exist in this context
結局のところ、私たちは間違った方法をとっています。おそらく、これはこのシナリオでは実用的ではありません。
どう思いますか?
別のオプションはありますか?
または、この問題はすべて解決可能ですか? 何か提案はありますか?