Internet Explorer 缓存 asp.net mvc ajax 结果

Posted

技术标签:

【中文标题】Internet Explorer 缓存 asp.net mvc ajax 结果【英文标题】:Internet Explorer Caching asp.netmvc ajax results 【发布时间】:2011-02-08 19:59:37 【问题描述】:

我在 Internet Explorer 中的某个页面遇到问题。 我有一个 ajax 调用,它在其他浏览器中调用一个表单,当我单击它在控制器中传递的链接并正确加载数据时。但是在 IE 中,当它加载一次时,它会在没有传入控制器的情况下给我带来相同的旧结果。

【问题讨论】:

Unexpected Caching of AJAX results in IE8的可能重复 【参考方案1】:

试试:

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

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

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

这里是关于 OutputCacheAttribute 的很好的描述:Improving Performance with Output Caching

你也可以把它放在行动上。

【讨论】:

这应该不是问题,因为缓存只发生在 IE 中 @Malcolm Frexner:浏览器的缓存策略不同。 IE 存在一些问题。【参考方案2】:

您可以尝试将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? 哎呀,对不起,我错过了你问题的这个重要部分。 我对此表示赞同,因为如果您使用的是 jQuery,这是正确的答案。事实上,如果你使用 jQuery 而不是 MVC 中的 MS Ajax 处理程序,IE 将完全忽略你在方法上设置的所有属性。【参考方案3】:

您可以在 AjaxOptions 上使用 HttpMethod = "POST"

var ajaxOpts = new AjaxOptions  UpdateTargetId = "TargetDiv",  HttpMethod = "POST";

喜欢这个经验;

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

【讨论】:

【参考方案4】:

我已经写过关于修复 jQuery 和 MS 客户端库的 IE 缓存问题的博客:

http://yoavniran.wordpress.com/2010/04/27/ie-caching-ajax-results-how-to-fix/

希望这会有所帮助!

【讨论】:

【参考方案5】:

我还发现这对类似(但不相同)的问题非常有用。

http://forums.asp.net/t/1681358.aspx/1?Disable+cache+in+Ajax+ActionLink+extension+method+in+asp+net+MVC

基本上确保您在请求中使用的是 POST 而不是 GET。这样做似乎可以防止 IE 缓存。

例如:

@Ajax.ActionLink("清除联系人", MVC.Home.ClearContacts(), new AjaxOptionsHttpMethod = "POST", UpdateTargetId="targetDiv")

【讨论】:

【参考方案6】:

如果您使用的是 Ajax Helper,您可以将 AllowCache 参数设置为 false,如下所示:

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

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

【讨论】:

这没有按预期工作,我试过了,它仍然被缓存【参考方案7】:

实际上在IE浏览器缓存中并没有自动清除。 但是在接受的chrome脚本中。所以你需要尝试 在浏览器级别清除数据。

【讨论】:

以上是关于Internet Explorer 缓存 asp.net mvc ajax 结果的主要内容,如果未能解决你的问题,请参考以下文章

Internet Explorer 中的 ASP.NET Gridview 水平对齐

ASP.NET:Internet Explorer 和 Firefox 之间的 Gridview 图像问题

Internet Explorer/Firefox 中的硬刷新和 XMLHttpRequest 缓存

如何使用 javascript 或 php 禁用 Internet Explorer 缓存

ASP.NET MVC Razor Url.Action 在 Internet Explorer 8 中不起作用

为 Internet Explorer 8 禁用 jQuery 中的缓存问题