MVCDonutCaching - Проблемы с дочерним действием, когда родитель не помещен в кэш. - PullRequest
4 голосов
/ 11 декабря 2011

Я использую пакет awesom MVCDonutCaching от Nuget для кэширования целых страниц, оставляя некоторые части без кэширования. Процесс прост и все работает как надо:

Я кеширую следующим образом:

[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.

Вкратце мой вопрос: возможно ли в этой библиотеке повторно использовать одно и то же дочернее действие независимо от того, использует ли родительское действие кэширование пончика или нет?

Буду признателен за любую помощь.

1 Ответ

4 голосов
/ 17 декабря 2011

В настоящее время вы должны использовать Html.Action вместе с фильтром действий DonutOutputCache, чтобы получить дырку от бублика для рендеринга.Если вы используете Html.Action без DonutOutputCache, вы увидите комментарий заполнителя, который вы обрисовали в общих чертах выше.

Это недосмотр, и он будет рассмотрен в следующем выпуске.

см.http://mvcdonutcaching.codeplex.com/workitem/2388

...