【发布时间】:2011-02-08 19:59:37
【问题描述】:
我在 Internet Explorer 中的某个页面遇到问题。 我有一个 ajax 调用,它在其他浏览器中调用一个表单,当我单击它在控制器中传递的链接并正确加载数据时。但是在 IE 中,当它加载一次时,它会在没有传入控制器的情况下给我带来相同的旧结果。
【问题讨论】:
标签: asp.net-mvc ajax internet-explorer caching asp.net-ajax
我在 Internet Explorer 中的某个页面遇到问题。 我有一个 ajax 调用,它在其他浏览器中调用一个表单,当我单击它在控制器中传递的链接并正确加载数据时。但是在 IE 中,当它加载一次时,它会在没有传入控制器的情况下给我带来相同的旧结果。
【问题讨论】:
标签: asp.net-mvc ajax internet-explorer caching asp.net-ajax
试试:
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
这个属性,放置在控制器类中,禁用缓存。由于我不需要在我的应用程序中缓存,我将它放在我的 BaseController 类中:
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public abstract class BaseController : Controller
{
这里是关于 OutputCacheAttribute 的很好的描述:Improving Performance with Output Caching
你也可以把它放在行动上。
【讨论】:
您可以尝试将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();
【讨论】:
您可以在 AjaxOptions 上使用 HttpMethod = "POST"
var ajaxOpts = new AjaxOptions { UpdateTargetId = "TargetDiv", HttpMethod = "POST"};
喜欢这个经验;
@Ajax.ActionLink("Text","ActionName", new AjaxOptions { UpdateTargetId = "TargetDiv", HttpMethod = "POST"})
【讨论】:
我已经写过关于修复 jQuery 和 MS 客户端库的 IE 缓存问题的博客:
http://yoavniran.wordpress.com/2010/04/27/ie-caching-ajax-results-how-to-fix/
希望这会有所帮助!
【讨论】:
我还发现这对类似(但不相同)的问题非常有用。
基本上确保您在请求中使用的是 POST 而不是 GET。这样做似乎可以防止 IE 缓存。
例如:
@Ajax.ActionLink("清除联系人", MVC.Home.ClearContacts(), new AjaxOptions{HttpMethod = "POST", UpdateTargetId="targetDiv"})
【讨论】:
如果您使用的是 Ajax Helper,您可以将 AllowCache 参数设置为 false,如下所示:
@Ajax.ActionLink("AjaxCall", "AjaxMethod", "DeconflictedFiles",
new { },
new AjaxOptions
{
AllowCache = false,
})
而且 IE 不会缓存调用结果。
【讨论】:
实际上在IE浏览器缓存中并没有自动清除。 但是在接受的chrome脚本中。所以你需要尝试 在浏览器级别清除数据。
【讨论】: