1

我有一个控制器,它调用控制器中名为 GetTypes() 的方法

[OutputCache(Duration = 6000)]
public List<SelectListItem> GetTypes()
{
   return Datetime.Now();
}

如果我从控制器内部从另一个操作方法调用此方法,为什么它不缓存?只有当我使用 URL 或 @Render 直接调用它时,它似乎才会缓存。

“本地主机/家庭/GetTypes”

4

1 回答 1

3

是的,这就是它的工作方式,也是它应该工作的方式。

原因是属性不会神奇地起作用。有些东西必须检查它们并根据它们做事。在处理请求时,该代码是 MVC 正常管道的一部分。

当您直接调用该方法时,您绕过了正常的管道,因此属性不会被评估和/或运行。

除此之外,只是简单的常识应该告诉您缓存仅适用于响应。如果没有响应(因为您直接调用它),它将不适用。

你应该做的是执行一个子动作。您将如何做到这一点取决于您调用该方法的位置和方式。因此,除非您向我们展示调用该方法的代码(及其周围的上下文),否则我无法进一步帮助您。

于 2012-04-17T17:31:33.210 回答