Asp.net mvc 3 HTML5离线功能是否适用于浏览器?

Asp.net mvc 3 HTML5离线功能是否适用于浏览器?,asp.net-mvc-3,html,offline-caching,Asp.net Mvc 3,Html,Offline Caching,我已经这样做了几天了,现在越来越沮丧了。我在Chrome、FF上得到了不一致的离线功能结果,我刚刚开始使用Safari 我正在使用Asp.NETMVC3开发一个沙盒应用程序。以下是我的申请结构: 控制器/车载控制器 视图/汽车/编辑 视图/汽车/编辑脱机 视图/汽车/索引 在3个视图中,索引是唯一定义了manifest属性的视图。索引是最初请求的视图。以下是我的舱单内容: CACHE MANIFEST FALLBACK: Car/Edit Car/EditOffline #Version

我已经这样做了几天了,现在越来越沮丧了。我在Chrome、FF上得到了不一致的离线功能结果,我刚刚开始使用Safari

我正在使用Asp.NETMVC3开发一个沙盒应用程序。以下是我的申请结构:

  • 控制器/车载控制器
  • 视图/汽车/编辑
  • 视图/汽车/编辑脱机
  • 视图/汽车/索引
在3个视图中,索引是唯一定义了manifest属性的视图。索引是最初请求的视图。以下是我的舱单内容:

CACHE MANIFEST

FALLBACK:
Car/Edit Car/EditOffline

#Version 1
在第一次请求索引时,浏览器在应用程序缓存中创建3个条目。它们是:

  • localhost/Sandbox/Car,type=master
  • localhost/Sandbox/Car/EditOffline,type=fallback
  • localhost/Sandbox/Offline.,type=manifest

我一直在模拟所有3种浏览器的脱机行为的方式是显式停止IIS。之后,已请求索引。我关闭IIS并请求编辑操作。结果是EditOffline得到了服务。现在,当我再次打开索引视图时,我得到一个404错误,但是为什么呢?我以为浏览器会提供该页面的缓存版本?当我重新设置编辑视图(仍处于脱机状态)时,也会出现404错误,但为什么?浏览器以前为EditOffline视图提供服务,那么为什么我现在要使用404呢?在FF中,我已经让它像预期的那样工作了好几次,但我没有对代码进行任何更改。我明确地删除了脱机缓存,重新启动了服务器,重新请求了索引视图,它神奇地工作了

看起来您的初始请求是
http://localhost/Sandbox/Car
,这是您随后获得404的URL吗?清单通过URL工作,但它不知道默认页面或任何其他服务器配置。所以
http://localhost/Sandbox/Car
http://localhost/Sandbox/Car/Index
就应用程序缓存而言。所涉及的视图在很大程度上与缓存无关,只是您在其中包含了对清单文件的引用。

您的浏览器可能仍然认为您处于联机状态。在FF中,单击文件->脱机工作,尝试强制脱机。还可以使用缓存api检查您的数据是否已下载并可脱机使用。别忘了在清单中包含你的.css和.js文件。@ZippyV无论浏览器认为它是否在线都与应用程序缓存无关,重要的是在做了一些额外的研发之后,我发现了一些东西。当我停止IIS并请求Car/Edit时,将从appCache检索Car/EditOffline并向用户显示。提供页面后,将触发appCache检查事件,然后触发过时事件。我认为,由于浏览器无法检索清单文件的状态,它会触发过时事件,这反过来会标记现有清单文件不再需要,应该删除。因此,对appCache中存储的资源的后续请求将返回404结果。根据w3c规范:如果由于404或410响应或等效响应导致获取清单失败,则运行以下子步骤:将缓存组标记为过时。除了处理已与缓存组中的应用程序缓存关联的文档对象外,此缓存组不再存在。“因此,我希望任何对清单/appCache中存在的资源的请求都会被浏览器填满;然而,根据我的观察,情况并非如此。也许我把规格解释错了?@J.m.我不这么认为。如果IIS没有运行,它不能返回404或410。是的,localhost/Sandbox/Car是我获取404的URL。在做了更多的研发之后,我发现如果我通过地址栏请求URL,我会得到404。如果我通过单击@Html.ActionLink呈现的链接请求URL,脱机资源将被提供。给出了什么?@J.M.
@Html.ActionLink
呈现的URL是什么?/Sandbox/Car是呈现的URL。我把它弄得一团糟,当我通过地址栏请求URL时,它神奇地工作了。我不知道我做了什么,我确信除了添加@Html.ActionLink之外没有其他代码更改。无论如何,我最终还是让它工作了。@J.M.你确定这些URL吗?我在回答中的要点是,像
/Sandbox/Car
/Sandbox/Car/
这样的东西是不同的URL。我只是看了一下,它们确实是URL。你能澄清一下你所说的/Sandbox/Car和/Sandbox/Car是什么意思吗?你是从清单的角度来考虑的吗?我相信MVC默认情况下会将这些URL路由到索引操作方法。在这两种情况下,动作链接呈现的URL都是/Sandbox/Car/Edit。