Internet Explorer缓存asp.net mvc ajax结果

时间:2010-04-16 13:01:56

标签: asp.net-mvc ajax internet-explorer caching asp.net-ajax

我在网络浏览器中遇到了一个问题。 当我点击它在控制器中传递的链接并正确加载数据时,我有一个调用表单的ajax调用,在其他浏览器中。但是在IE中,当它加载一次时,它就会带来相同的旧结果而不会传递给控制器​​。

7 个答案:

答案 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)

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

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

基本上确保您在请求中使用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脚本中工作被接受。所以你需要尝试 清除浏览器级别的数据。