Частичное представление MVC3 OutputCache переопределяется родительским представлением - PullRequest
3 голосов
/ 07 ноября 2011

При попытке установить другое свойство OutputCache для частичного представления я обнаружил, что кэш PartialView использует длительность родительского кэша вывода. С помощью следующего кода я надеюсь, что RenderPartial приведет к более короткой продолжительности OutputCache, но я обнаружил, что он такой же, как родительское представление (10 секунд)

public class HomeController : Controller
{
    [OutputCache(Duration=10, VaryByParam="none")]
    public ActionResult Index()
    {
        ViewBag.Message = "Time now: "+ DateTime.Now.ToString();

        return View();
    }

    [ChildActionOnly]
    [OutputCache(Duration=5, VaryByParam="none")]
    public PartialViewResult LogonPartial()
    {
        return PartialView("_LogOnPartial");
    }
}

В этом простом примере, показывающем DateTime.Now в частичном представлении, я обнаружил, что PartialView не очищает свой кеш, пока родительское представление не очистит его, и я надеюсь, что частичное представление очищает кеш каждые 5 секунд (не каждые 10, как родительское представление делает). С примерами, которые я видел, используя OutputCache для PartialView, кэш реализован в PartialView, а не в содержащем его представлении. Кто-нибудь знает, является ли это ограничением кэширования в MVC3 или есть другой способ обработки различных механизмов кэширования на одной странице? Заранее спасибо!

1 Ответ

3 голосов
/ 07 ноября 2011

Вы кэшировали весь родительский вид на 10 секунд. Это означает, что в течение этих 10 секунд дочернее действие никогда не будет выполнено, и весь вид будет обслуживаться из кэша. Даже если срок действия кеша дочернего действия истечет через 5 секунд, он все равно не будет активирован.

В ASP.NET MVC 3 поддерживается только кэширование кольцевой дыры (кэшируйте часть страницы с помощью атрибута OutputCache дочернего действия). Кеширование пончиков не поддерживается (исключая части кэшированной страницы из этого кэша).

...