2011-10-17 7 views
1

誰かがこれにいくつかの光を当てはめることができますか?アクションがこのように装飾されている:ASP MVC 3の出力キャッシュが予期したとおりに動作しない

[OutputCache(Duration = 5, VaryByParam = "none")] 
     public ActionResult MyAction() 
{ 
// DO STUFF HERE... 
} 

をMyActionフォーム(バックMyActionに投稿-法ポスト)を有するビューを呼び出します。 (ポストバックの)メカニズムは正常に動作します。私はDuration 5を宣言します。これは5秒を意味しますか?だから、5秒後に

http://myAddress/MyController/MyAction

再びそれを呼び出す場合。 。 。アクションは呼び出されません!どうして?私は何が欠けていますか? ありがとうございます!

答えて

1

クライアント側のキャッシュを排除してください。 (ブラウザのキャッシュをクリアするか、別のブラウザを使用する、ダミーのパラメータを追加するなど)MVCが実際にクライアントにコンテンツをキャッシュするための提案を送信するので、ブラウザはこのコンテンツをキャッシュする可能性が高くなります指定された時間。あなたのブラウザがその提案を受けて、提案されたものより長くキャッシュすることを決めたのであれば、私は驚くことはありません。

サーバーサイドのコードはいつどの時点でトリガーされますか? 20秒? 40?これまでですか?

+0

正直言って私はクライアント側のキャッシュと関係があるとも思っています。だから、私はキャッシュをクリアして(Mozilla FireFoxで)すぐに電話しました\t http:// myAddress/MyController/MyActionは同じ結果を返します(アクションは呼び出されません) –

+0

あなたの提案はこの種のソリューション問題のだから私は解決策としてそれを取る。ありがとう。 –

+0

@sawasアクションメソッドをもう一度呼び出すのですか? 5分後? –

0

あなたはOutputCacheをテストする場合、そうすることは非常に容易である属性:

コントローラー: パブリッククラスにHomeController:コントローラ { [OutputCache(期間= 60)] 公共のActionResultインデックス() { ViewBag.Time = DateTime.Now; }}

ビュー:

@{ 
    ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 

<p>@ViewBag.Time</p> 

あなたはこの家アクションに行くコンパイルする場合、それは現在の時刻を表示します。リフレッシュすると、さらに60秒間は更新されません。

別の点として、VaryByParamパラメータについて理解していないと思います。これは、 "none"クエリパラメータ用に別々のバージョンをキャッシュすることを意味します。彼らはすべて互いに別にキャッシュされます

/home/index 
/home/index?none=abc 
/home/index?none=xyz 

:あなたは次のURLを持っている場合を意味

。たぶんあなたはこれを理解しましたが、私はあなたの "none"を解釈して、あなたがそれをパラメータによって変えたくないということを意味していました。私があなたの意図を誤解した場合、この部分を無視してください。

0

この動作は、アクションメソッド内の誤ったロジックに起因することが分かります。 Firebugでデバッグすると、次のように表示されます。

Server ASP.NET Development Server/10.0.0.0 
Date Mon, 17 Oct 2011 18:23:46 GMT 
X-AspNet-Version 4.0.30319 
X-AspNetMvc-Version 3.0 
Cache-Control no-cache, no-store, must-revalidate 
Pragma no-cache 
Expires -1 
Content-Type text/html; charset=utf-8 
Content-Length 7057 
Connection Close 

これは正しい動作です! お手数をおかけしていただきありがとうございます。

関連する問題