MVC3 - 正在缓存AJAX部分视图......我无法阻止它

时间:2011-02-10 20:30:42

标签: c# asp.net-mvc asp.net-mvc-3

我正在使用MVC3 - 我有一个javascript函数,它使用jQuery get()从控制器获取PartialView。

问题在于它被缓存并且我一直在回收过时的内容。

我在动作上尝试了[OutputCache(Duration = 0)],认为它会阻止它缓存,但没有快乐。可能是客户端缓存它吗?

编辑:

我最近一直在使用另一种方法来阻止缓存,这可能对某些人有用。

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

显然不是那么干净,但是因为每个请求都传递_=12345678(时间戳),所以它永远不会被缓存。

希望它有所帮助。

4 个答案:

答案 0 :(得分:21)

浏览器可以自动缓存GET请求,因此您可以使用.ajax()函数,这与.get()函数相反,允许您禁用缓存:

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

    }
});

另一种可能性是使用POST:

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

});

答案 1 :(得分:19)

IE尤其糟糕。您可以使用以下命令禁用所有AJAX缓存:

$.ajaxSetup({
    cache: false
});

答案 2 :(得分:9)

默认情况下,所有MVC 3部分视图似乎都是自动缓存的,但您可以从控制器控制每个部分视图,这些部分视图在操作前面带有属性(或在Java中调用的注释)返回:

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

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

答案 3 :(得分:5)

感谢你们两个,第一个仍然使用type =“GET”缓存,即使是缓存:'false'指定。那是使用chrome和本地IIS7。

我最终得到了

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

工作正常,谢谢你的回复。