1

私はGetTypes(と呼ばれるコントローラのメソッドを呼び出して、コントローラを持っている)URL経由で呼び出されない限り、MVC3出力キャッシュはキャッシュされません。正しい?私は別のアクションメソッドから私のコントローラの内部からそれを呼び出す場合

[OutputCache(Duration = 6000)] 
public List<SelectListItem> GetTypes() 
{ 
    return Datetime.Now(); 
} 

なぜこのメソッドはキャッシュしませんか?それだけで私ははい、それはそれが動作する方法、およびそれが動作するはずの方法です

は「localhost /ホーム/ GetTypes」

答えて

3

..直接URLまたは@Renderを使用して、それを呼び出したときにキャッシュしているようです。

属性が魔法のように動作しないという理由があります。何かがそれらを調べ、それらに基づいて何かをしなければならない。このコードは、リクエストを処理するときの通常のMVCパイプラインの一部です。

このメソッドを直接呼び出すと、通常のパイプラインをバイパスするため、属性の評価や実行が行われません。

これ以外にも、キャッシングはレスポンスにのみ適用されることがわかります。応答がない場合(直接呼び出したため)、それは適用されません。

代わりに子のアクションを実行する必要があります。どのように行うのかは、メソッドを呼び出す場所と方法によって異なります。したがって、メソッド(およびその周辺のコンテキスト)を呼び出すコードを表示しない限り、私はさらにあなたを助けることはできません。

関連する問題