Подтвердить что ты не робот

Кэширование частичной страницы и VaryByParam в ASP.NET MVC 3

Я пытаюсь использовать новое кэширование частичных страниц, доступное в 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, что я не понимаю?

4b9b3361

Ответ 1

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

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

    <% Html.RenderAction("RenderContent", Model, Model.Id); %>
    
    [Authorize]
    [OutputCache(Duration = 6000, VaryByParam = "id", VaryByCustom = "browser")]
    public ActionResult RenderContent(Content content, string id)
    {
       return PartialView(content);
    }