有人可以对此有所了解吗?以这种方式装饰动作:
[OutputCache(Duration = 5, VaryByParam = "none")]
public ActionResult MyAction()
{
// DO STUFF HERE...
}
MyAction调用一个包含一个表单的视图(发布回MyAction POSTED-Method)。 机制(回发)工作正常。我声明持续时间5,意味着5秒(或不是?)。所以5秒后如果再次打电话
http://myAddress/MyController/MyAction
。 。 。动作没有被调用!为什么?我错过了什么? 提前谢谢!
答案 0 :(得分:1)
尝试排除客户端缓存。 (清除浏览器中的缓存,或使用其他浏览器,添加虚拟参数等)。您的浏览器比非输出缓存页面更有可能缓存此内容,因为MVC实际上向客户端发送建议以缓存内容在指定的时间。如果您的浏览器接受了该建议并决定缓存超过建议时间,我不会感到惊讶。
您的服务器端代码在什么时候再次触发? 20秒? 40?永远不会消失?
答案 1 :(得分:0)
如果要测试OutputCache属性,则很容易这样做:
控制器: 公共类HomeController:控制器 { [的OutputCache(持续时间= 60)] 公共ActionResult索引() { ViewBag.Time = DateTime.Now; } }
查看:
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>@ViewBag.Time</p>
如果您编译它并转到主页操作,它将显示当前时间。如果你刷新它,那么它将不再更新60秒。
另一方面,我不确定你是否了解VaryByParam参数。这意味着它将为“none”查询参数缓存单独的版本。
这意味着如果您有以下网址:
/home/index
/home/index?none=abc
/home/index?none=xyz
它们将彼此分开缓存。也许你确实理解了这一点,但我解释你的“无”意味着你不希望它因参数而变化,这就是为什么你把“无”放在那里。如果我误解了你的意图,那就忽略这一部分。
答案 2 :(得分:0)
原来,这种行为是由Action Method中的错误逻辑引起的。 Firebug中的调试显示如下:
Server ASP.NET Development Server/10.0.0.0
Date Mon, 17 Oct 2011 18:23:46 GMT
X-AspNet-Version 4.0.30319
X-AspNetMvc-Version 3.0
Cache-Control no-cache, no-store, must-revalidate
Pragma no-cache
Expires -1
Content-Type text/html; charset=utf-8
Content-Length 7057
Connection Close
(我认为)是正确的行为! 谢谢大家的帮助!