4

さまざまなシナリオで多くのユーザー コントロールをレンダリングするサイト (実際にはアプリケーション ビルダー) があります。

ある日、マネージャーOutput cacheはメインページに追加することを決めました.

OK、すべて問題なく、リクエストは非常に迅速に応答しました!

しかし一方で、このキャッシングにはいくつかの問題があります。

InsertForm User controlいくつかのエンティティを埋めた と、エンティティのリストを表示する があると仮定するとListForm User Control、何が起こるか推測できます。エンティティは正しく埋められているのに、リストに表示されていません。なぜでしょうか? 出力キャッシュのためです。

次に、このユーザー コントロールをキャッシュから除外する必要があります。検索の結果、Donut Cachingが見つかりました。

動的にサーバー コントロールを Substitution に追加します

ほとんどのユーザー コントロールの実装は、すべてのページ ライフ サイクルに依存します。一部はInitで実行され、一部はLoadで実行され、一部はRenderで実行されるため、ほとんどのシナリオではプレース ホルダーがあり、次のようにします。

ここに画像の説明を入力

ここに画像の説明を入力

PreRender では、重複を防ぐために placeHolder からすべてのコントロールを削除します。

ここに画像の説明を入力

場合によっては良い結果が得られますが、一部の実装では再び問題がRequest発生します。また、バインド イベントでは、ウィザードの次のボタンのクリック イベントのように、イベントが正しくバインドされないという問題が再び発生します。HttpContext.Current.RequestSessionWizardRequest does not exist in this context

結局のところ、私たちは間違った方法をとっています。おそらく、これはこのシナリオでは実用的ではありません。

どう思いますか?

別のオプションはありますか?

または、この問題はすべて解決可能ですか? 何か提案はありますか?

4

1 に答える 1