我正在使用MVC3 - 我有一个javascript函数,它使用jQuery get()从控制器获取PartialView。
问题在于它被缓存并且我一直在回收过时的内容。
我在动作上尝试了[OutputCache(Duration = 0)],认为它会阻止它缓存,但没有快乐。可能是客户端缓存它吗?
编辑:
我最近一直在使用另一种方法来阻止缓存,这可能对某些人有用。
$.get("/someurl?_="+$.now(),function(data) {
// process data
});
显然不是那么干净,但是因为每个请求都传递_=12345678
(时间戳),所以它永远不会被缓存。
希望它有所帮助。
答案 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);
}
});
工作正常,谢谢你的回复。