Asp.net mvc 3 Html.Action和OutputCache存在问题

Asp.net mvc 3 Html.Action和OutputCache存在问题,asp.net-mvc-3,outputcache,Asp.net Mvc 3,Outputcache,在视图中使用Html.Action显示启用了CacheControl的操作的结果时,我遇到了一个问题 代码 [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*"] public class CachedController : Controller { public ViewResult CachedAction() { var model = GetFromDB(); retur

在视图中使用
Html.Action
显示启用了CacheControl的操作的结果时,我遇到了一个问题

代码

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*"]
public class CachedController : Controller
{
    public ViewResult CachedAction()
    {
        var model = GetFromDB();
        return PartialView(model);  
    }
}

在SomeView.cshtml文件中,如果我有代码

@Html.Action("CachedAction", "Cached")
我收到一个Http 500错误,SomeView.cshtml的html被发送到浏览器,包含在一个pre标记中,如:

<!DOCTYPE html>
<html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <pre>
            // HTML for someView.cshtml here
        </pre>
    </body>
</html>

标题
//这里是someView.cshtml的HTML
有人知道这里有什么问题吗

注意:
如果我删除OutputCacheAttribute并看到正确呈现的视图,代码将按预期工作。

请尝试直接在操作上方使用属性,而不是在控制器定义上方。

此时您正在设置整个控制器上的缓存,而不是操作

尝试移动它,使您的代码变成:

@Html.Action("CachedAction", "Cached")

当然,除非这是你的意图,但你的问题并不清楚。

我的问题得到了解决。我使用OutputCache属性指定不应缓存此控制器中的操作的输出,而只有少数操作有此要求,我天真地将其应用于控制器上的所有操作


我通过从控制器中删除缓存,并使用OutputCache属性修饰所需的操作,修复了这个问题。如果页面缓存了Html.Action,ASP.NETMVC代码呈现页面的方式也存在问题。我希望这部电影不会上映。但是在这个页面中,没有加载整个页面

我意识到这个问题在很大程度上是有关联的。我在这篇文章中引用了很多建议作为评论和回答。我也不想把我自己的答案标记为接受。所以,如果你们中的一个总结了一些关于调试这个问题的技巧,并更新了你们的答案,我会将其标记为已接受

而不是使用

@Html.Partial("CachedAction")
试试下面的方法


而不是public viewresult编写public partialviewResult,这并不能解决我的问题。我很确定这是因为在CachedAction上进行了缓存。显示HTTP 500错误中的堆栈跟踪。@jgauffin。这是另一个问题。我没有看到像我从其他案例中看到的那样的500堆栈跟踪。这是我从chrome开发工具中看到的,我对开发工具中的“预览”窗格更感兴趣。在另一种情况下,没有得到错误并不重要。据我所知,它可能返回了缓存命中。@Gatz,当前代码要求缓存控制器上的大多数操作。有什么方法可以覆盖不被缓存的操作吗?[CacheControl(HttpCacheability.NoCache),HttpGet]如果您不想被缓存,请在操作上设置。“如果页面缓存了Html.Action,ASP.NET MVC代码呈现页面的方式也存在问题。我希望这部电影不会上映。但是在这个页面中,整个页面没有被加载。”。你解决了这个问题吗?我刚刚意识到我正在缓存整个页面而不是部分(!)并显示错误的用户信息。
@Html.Partial("CachedAction")