我在网络浏览器中遇到了一个问题。 当我点击它在控制器中传递的链接并正确加载数据时,我有一个调用表单的ajax调用,在其他浏览器中。但是在IE中,当它加载一次时,它就会带来相同的旧结果而不会传递给控制器。
答案 0 :(得分:25)
尝试:
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
此属性放在控制器类中,禁用缓存。由于我的应用程序中不需要缓存,因此将其放在BaseController类中:
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public abstract class BaseController : Controller
{
以下是有关OutputCacheAttribute的详细说明:Improving Performance with Output Caching
您也可以将其置于行动中。
答案 1 :(得分:10)
您可以尝试将cache
选项设置为false
:
$.ajax({
url: '/controller/action',
type: 'GET',
cache: false,
success: function(result) {
}
});
此选项将强制浏览器不缓存请求。
更新:
根据评论,您可以为网址添加唯一的时间戳,以避免缓存问题:
var d = new Date();
var myURL = 'http://myserver/controller/action?d=' +
d.getDate() +
d.getHours() +
d.getMinutes() +
d.getMilliseconds();
答案 2 :(得分:3)
您可以在AjaxOptions上使用HttpMethod = "POST"
var ajaxOpts = new AjaxOptions { UpdateTargetId = "TargetDiv", HttpMethod = "POST"};
喜欢这个exp;
@Ajax.ActionLink("Text","ActionName", new AjaxOptions { UpdateTargetId = "TargetDiv", HttpMethod = "POST"})
答案 3 :(得分:0)
我发表了关于修复jQuery和MS客户端库的IE缓存问题的博客:
http://yoavniran.wordpress.com/2010/04/27/ie-caching-ajax-results-how-to-fix/
希望这有帮助!
答案 4 :(得分:0)
我还发现这对类似(但不完全相同)的问题非常有用。
基本上确保您在请求中使用POST而不是GET。这样做似乎阻止了IE的缓存。
例如:
@Ajax.ActionLink(“Clear Contacts”,MVC.Home.ClearContacts(),new AjaxOptions {HttpMethod =“POST”,UpdateTargetId =“targetDiv”})
答案 5 :(得分:0)
如果您使用的是Ajax Helper,可以将AllowCache
参数设置为false
,如下所示:
@Ajax.ActionLink("AjaxCall", "AjaxMethod", "DeconflictedFiles",
new { },
new AjaxOptions
{
AllowCache = false,
})
IE不会缓存呼叫结果。
答案 6 :(得分:0)
实际上在IE浏览器中缓存不会自动清除。 但在chrome脚本中工作被接受。所以你需要尝试 清除浏览器级别的数据。