Частичное кэширование страниц и VaryByParam в ASP.NET MVC 3 - PullRequest
19 голосов
/ 28 февраля 2011

Я пытаюсь использовать новое частичное кэширование страниц, доступное в ASP.NET MVC 3. На мой взгляд, я использую:

<% Html.RenderAction("RenderContent", Model); %>

Который вызывает метод контроллера:

[Authorize]
[OutputCache(Duration = 6000, VaryByParam = "*", VaryByCustom = "browser")]
public ActionResult RenderContent(Content content)
{
   return PartialView(content);
}

Обратите внимание, что как исходный вид, так и частичный вид используют одну и ту же модель вида.

Проблема в том, что VaryByParam не работает - RenderContent() всегда возвращает один и тот же кэшированный HTML, независимо от того, какая модель представления ему передана. Есть ли в VaryByParam что-то, чего я не понимаю?

1 Ответ

26 голосов
/ 28 февраля 2011

Думаю, я понял это.Похоже, проблема в том, что VaryByParam, когда входной параметр является объектом, использует ToString() для этого объекта, чтобы определить его уникальность.Таким образом, остаются две опции:

  1. Переопределение ToString() для предоставления уникального идентификатора.
  2. Передача уникального идентификатора в качестве дополнительного параметра:

    <% Html.RenderAction("RenderContent", Model, Model.Id); %>
    
    [Authorize]
    [OutputCache(Duration = 6000, VaryByParam = "id", VaryByCustom = "browser")]
    public ActionResult RenderContent(Content content, string id)
    {
       return PartialView(content);
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...