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 缓存