4

特定の部分をキャッシュせずにページ全体をキャッシュするために、Nugetの素晴らしいMVCDonutCachingパッケージを使用しています。プロセスは単純で、すべてが正常に機能します。

私は次のようにキャッシュしています:

[DonutOutputCache(CacheProfile = "FiveMins")]
public ActionResult Index()
{
  return View();
}

私のページのセクションでは、キャッシュしたくないので、次のことを行っています。

  @Html.Action("HeaderLinks","Home", true)

これは正常に機能し、実際にページの大部分はキャッシュされますが、ヘッダーリンク(ユーザーがログインしていない場合はログオンボタンを表示するコンテキスト依存リンク、ログインしている場合はユーザー名など)はキャッシュされません。これまでのところすべてが機能します。

私が抱えている問題は、ヘッダーリンクがマスター/レイアウトページに属し、アクションにDonutOutputCache属性が設定されているかどうかに関係なく、全面的に使用されることです。別のアクションを作成するときは、ドーナツキャッシュ属性なしで「私たちについて」と呼びましょう。ヘッダーリンクはまったく表示されません。

public ActionResult AboutUs()
{
  return View();
}

ソースコードを見ると、次のように見えます

<!--Donut#
<ActionSettings xmlns="http://schemas.datacontract.org/2004/07/DevTrends.MvcDonutCaching" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<ActionName>HeaderLinks</ActionName>
<ControllerName>Home</ControllerName>
<RouteValues xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<a:KeyValueOfstringanyType>
<a:Key>Area</a:Key>
<a:Value i:type="b:string" xmlns:b="http://www.w3.org/2001/XMLSchema"/>
</a:KeyValueOfstringanyType>
</RouteValues>
</ActionSettings>
#-->

明らかに、ドーナツキャッシングライブラリによって生成された上記の例では、リンクセクションがコメント付きのXMLに置き換えられています。

一言で言えば、私の質問は、親アクションがドーナツキャッシングを使用しているかどうかに関係なく、このライブラリで同じ子アクションを再利用することは可能ですか?

どんな助けでもいただければ幸いです。

4

1 に答える 1

4

現在、レンダリングするドーナツ ホールを取得するには、Html.Action を DonutOutputCache アクション フィルターと一緒に使用する必要があります。DonutOutputCache なしで Html.Action を使用すると、上で概説したプレースホルダー コメントが表示されます。

ただし、これは見落としであり、次のリリースで対処される予定です。

http://mvcdonutcaching.codeplex.com/workitem/2388を参照してください。

于 2011-12-16T21:03:56.887 に答える