2011-02-10 56 views
20

我正在使用MVC3 - 我有一个JavaScript函数,它使用jQuery get()从控制器获取PartialView。MVC3 - 正在缓存AJAX部分视图...我无法阻止它

问题是它正在被缓存,我不断收回陈旧的内容。

我试过[OutputCache(Duration = 0)]这个动作,认为它会阻止它缓存,但没有喜悦。客户端是否也可以缓存它?

编辑:

我最近一直在用另一种方式来防止缓存可能是一些有用的。

$.get("/someurl?_="+$.now(),function(data) { 
    // process data 
}); 

这显然不是干净,但因为每个请求通过一个_=12345678(时间戳)它永远不会缓存。

希望它有帮助。

回答

21

GET请求可以被浏览器自动缓存,以便您可以使用.ajax()功能,这违背了.get()功能允许您禁用缓存:

$.ajax({ 
    url: '/foo', 
    type: 'GET', 
    cache: 'false', 
    success: function(result) { 

    } 
}); 

另一种可能性是使用POST:

$.post('/foo', function(result) { 

}); 
19

IE尤其糟糕。您可以通过以下禁用所有AJAX缓存:

$.ajaxSetup({ 
    cache: false 
}); 
+1

这比Darin的方法更好,因为它允许您仍然使用MVC的Ajax.foo帮助程序方法 – 2011-02-10 20:36:45

+3

这将全局禁用所有AJAX GET请求的情况,这可能不是所需的行为。 – 2011-02-10 20:38:49

5

感谢你们两位,类型=仍缓存的第一个“GET”即使缓存:“假”指定。这是使用铬和本地IIS7。

我结束了

$.ajax({ 
      url: '@Url.Action("GetMyPartialView","MyController")/' + parameterId, 
      type: 'POST', 
      cache: 'false', 
      success: function (result) { 
       $('#dynamicContentDiv').html(result); 
      } 
}); 

做工精细,感谢你的反应。

+0

这是我用IE浏览器工作的唯一东西。使用缓存:false不起作用,使用OutputStore属性不起作用,其他问题的其他答案不起作用。将“[email protected]()。ToString()”添加到URL末尾是唯一有效的工作。 – Matt 2017-08-18 02:12:50

9

默认情况下,所有MVC 3部分视图都会被自动缓存,但是您可以通过控制器控制每个局部视图的这种情况,这些视图是通过属性返回的(或者在Java中调用注释时)行动:

[OutputCache(Duration = 0)] 
public ActionResult PersonEdit(string id) 
{ 
    // do query and fill editvm here 
    return PartialView("PersonEdit",editvm); 
} 

所以持续时间设置为零。可能有许多其他属性可以设置为关闭缓存,但到目前为止,这似乎对我个人有用。