1

GetTypes() というコントローラーのメソッドを呼び出すコントローラーがあります。

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

別のアクション メソッドからコントローラー内から呼び出すと、このメソッドがキャッシュされないのはなぜですか? URLまたは@Renderを使用して直接呼び出した場合にのみキャッシュされるようです..

「ローカルホスト/ホーム/GetTypes」

4

1 に答える 1

3

はい、それはそれが機能する方法であり、それが機能するはずの方法です。

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

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

それを超えて、単純な常識は、キャッシングが応答にのみ適用されることを教えてくれるはずです。応答がない場合(直接呼び出したため)、適用されません。

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

于 2012-04-17T17:31:33.210 に答える