【问题标题】:ASP.NET MVC 4.0 Chrome CachingASP.NET MVC 4.0 Chrome 缓存
【发布时间】:2013-12-03 03:22:30
【问题描述】:

我有代码可以在我的 MVC 应用程序中禁用缓存。我正在使用以下响应标头。它们似乎适用于除 Chrome 之外的所有浏览器(当前使用版本 31.0.1650.48)。用户可以提交带有模型值的表单。当他们点击后退按钮时,我需要使用空白模型重新加载页面。由于请求正在执行操作并返回空白模型,因此标头似乎部分工作。但是视图没有更新。上一篇文章中的值将被保留。我试过清除 ModelState 但这不起作用。有什么建议么?提前致谢!!

    filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1))
    filterContext.HttpContext.Response.Cache.SetValidUntilExpires(False)
    filterContext.HttpContext.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches)
    filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache)
    filterContext.HttpContext.Response.Cache.SetNoStore()

【问题讨论】:

  • 这可能不是最好的解决方案,但我所做的是在页面加载时在 javascript 中将表单中的值设置为 null(或重置)。
  • @fassetar:感谢您的建议。

标签: asp.net-mvc google-chrome asp.net-mvc-4 caching


【解决方案1】:

关闭表单的自动完成功能为我解决了这个问题。感谢您的所有意见!

  <form autocomplete="off"></form>

【讨论】:

    【解决方案2】:

    javascript 有一种方法可以一次性完成所有操作...

    document.getElementById("YourFormID").reset();
    

    只需在表单中添加一个 ID,您的所有输入都会在页面加载时重置。无论是第一次访问还是单击后退按钮都会缓存页面。与您的解决方案的最大区别在于“the autocomplete attribute is new in HTML5”。这意味着旧版浏览器不支持它,尽管它可以满足您的需求,但它也会阻止用户自动填充字段。这意味着例如在文本类型输入中,用户不会看到他们可能在之前或其他页面上输入的单词的建议。你可以看一个例子here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-19
      • 1970-01-01
      • 2013-10-12
      • 2012-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多