2011-06-20 3 views
4

私はアプリケーションのメニューを作成する部分ページです。私は、レンダリングを使用してメニューの部分ビューを呼び出しています。私はこの部分ページがあるクライアントサイドのOutputcache属性 '

[OutputCache(Duration=7200, Location =OutputCacheLocation.Client, NoStore= true)] 

を行うことによって、クライアント側では、この部分のページを保存したいが、私はこの

+0

属性から「NoStore」を削除します。 –

答えて

2

クライアント側のキャッシュへの任意の代替は、パーシャルことは不可能である

OutputCacheAttribute for child actions only supports Duration, VaryByCustom, and VaryByParam values. Please do not set CacheProfile, Location, NoStore, SqlDependency, VaryByContentEncoding, or VaryByHeader values for child actions 

次のエラーを取得していますクライアントブラウザはHTMLを受け取るだけです。サーバー側には 'partials'しか存在しません。

なぜサーバー側のキャッシュを使用しないのですか?

メニューの内容がユーザーに依存する場合、関連するユーザー情報を子アクションのパラメーターに追加できます。たとえば、

[OutputCache(Duration=7200, VaryByParam="*")] 
public PartialViewResult Menu(int userId) 
{ 
    ... 
} 
+1

それはサーバー上であまりにも多くのメモリを取るだろうか?これにより、2時間の範囲内でアクティブユーザーのインスタンス数が生成されます。確かにわかりませんが、これは実際のHTMLをメモリに保存して、いくつかの変数だけでなく、スペースがもっと大きくなると思います。 –

+0

これは実際的な解決策ではありません。すべてのページの上部にあるユーザー名とともにウェルカムメッセージを表示したい場合があります。また、ユーザーを指定するパラメータを追加することもできますが、何千ものユーザーの出力をメモリに保存することは、賢明な言い訳ではありません。 – SepehrM

関連する問題