Кэширование частичной страницы и 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
, что я не понимаю?
Ответы
Ответ 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);
}