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

sam*_*tin 20 c# asp.net-mvc asp.net-mvc-3

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

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

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

编辑:

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

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

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

希望能帮助到你.

Dar*_*rov 21

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

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

    }
});
Run Code Online (Sandbox Code Playgroud)

另一种可能是使用POST:

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

});
Run Code Online (Sandbox Code Playgroud)


Jos*_*son 19

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

$.ajaxSetup({
    cache: false
});
Run Code Online (Sandbox Code Playgroud)

  • 这会对所有可能不是所需行为的AJAX GET请求进行全局禁用. (4认同)

Joh*_*ncl 9

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

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

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

  • [OutputCache(Duration = 0)]抛出一个错误:"Duration必须是一个正数"[OutputCache(NoStore = true)]可以正常工作. (2认同)

sam*_*tin 5

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

我结束了

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

工作正常,谢谢你的回应.