我正在尝试使用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
的某些内容我不明白?
答案 0 :(得分:26)
我想我明白了。看起来问题是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);
}