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

Jam*_*lak 19 c# asp.net-mvc caching asp.net-mvc-3

我正在尝试使用ASP.NET MVC 3中提供的新的部分页面缓存.在我看来,我正在使用:

<% Html.RenderAction("RenderContent", Model); %>
Run Code Online (Sandbox Code Playgroud)

哪个调用控制器方法:

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

请注意,原始视图和局部视图都使用相同的视图模型.

问题是VaryByParam不起作用 - RenderContent()无论传递给哪个视图模型,总是返回相同的缓存HTML.有什么关于VaryByParam我不明白的事吗?

Jam*_*lak 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);
    }
    
    Run Code Online (Sandbox Code Playgroud)