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

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

【问题讨论】:

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


【解决方案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 AjaxOptions{HttpMethod = "POST", UpdateTargetId="targetDiv"})

      【讨论】:

        【解决方案6】:

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

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

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

        【讨论】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-06-24
          • 1970-01-01
          • 2015-09-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多