ASP.NET MVC 3中的部分页面缓存和VaryByParam

时间:2011-02-28 16:22:28

标签: c# asp.net-mvc caching 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 个答案:

答案 0 :(得分:26)

我想我明白了。看起来问题是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);
    }