Internet Explorer 缓存 asp.net mvc ajax 结果

19

我在使用Internet Explorer浏览器时遇到了问题。我有一个ajax调用,它会调用一个表单,在其他浏览器中,当我点击链接时,它会经过控制器并正确加载数据。但是在IE中,当它被加载一次后,它总是带给我相同的旧结果,而不经过控制器。


可能是意外缓存IE8中的AJAX结果的重复问题。 - Mark Sowul
7个回答

27

尝试:

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]

这个属性放在控制器类中,用于禁用缓存。由于我不需要缓存,在我的BaseController类中设置了它:

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public abstract class BaseController : Controller
{

关于OutputCacheAttribute,这里有一个很好的描述:使用输出缓存提高性能

你也可以将它放在操作上。


这不应该是问题,因为缓存只会在IE中发生。 - Mathias F
2
@Malcolm Frexner:浏览器的缓存策略有所不同。IE存在一些问题。 - LukLed

11

您可以尝试将cache选项设置为false

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

    }
});

这个选项将强制浏览器不缓存请求。


更新:

根据评论,您可以在URL中添加唯一的时间戳以避免缓存问题:

var d = new Date();
var myURL = 'http://myserver/controller/action?d=' + 
    d.getDate() + 
    d.getHours() + 
    d.getMinutes() + 
    d.getMilliseconds();

好的,我正在使用Microsoft Ajax,而不是jQuery。 ;) 这个设置适用于所有基于ajax的调用吗?甚至对于msAjax也是这样吗? - Diego Correa
抱歉,我错过了你问题中的这个重要部分。 - Darin Dimitrov
3
我会点赞这个回答,因为如果你在使用jQuery的话,这是正确的答案。事实上,如果你在MVC中使用jQuery而不是MS Ajax处理程序,IE将完全忽略你在方法上设置的所有属性。 - James

3
您可以在AjaxOptions中使用HttpMethod =“POST”
var ajaxOpts = new AjaxOptions { UpdateTargetId = "TargetDiv",  HttpMethod = "POST"};

像这样的实例;

@Ajax.ActionLink("Text","ActionName", new AjaxOptions { UpdateTargetId = "TargetDiv",  HttpMethod = "POST"})

0
如果您正在使用Ajax Helper,可以像这样将AllowCache参数设置为false:

@Ajax.ActionLink("AjaxCall", "AjaxMethod", "DeconflictedFiles",
                 new { }, 
                 new AjaxOptions
                 {
                     AllowCache = false,
                 }) 

而且IE不会缓存调用的结果。


这个不像预期的那样工作,我尝试了一下,但它仍然被缓存了。 - Serlok

0

0

0

实际上,在IE浏览器中,缓存不会自动清除。 但在Chrome中,脚本可以正常工作。因此,您需要尝试在浏览器级别清除数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接