0

我有一个基本的 MVC 表单,我一直在尝试使用 Javascript 缓存 API 来缓存我所有的 css、js、html 文件,这样当用户(该领域的人)没有可靠的访问权限时,他们仍然可以使用我的 web形式。显然,我也在使用 IndexedDB 和服务工作者来检查连接并在连接不可用时在本地保存,在连接可用时同步。

我已经阅读了一些教程,在处理缓存实际的物理文件(css、html、js)时,一切似乎都很简单。MVC 很奇怪,因为您正在路由。我创建了 basix Index、Create、Edit、Details 视图。当我创建要缓存的 URL 数组时,例如

var urlsToCache = [

'/App/Details',
'/App/Edit',
'/App/Create',
'/App/Index',

'/App/Content/bootstrap.css',
'/App/Content/site.css',
'/App/Scripts/jquery-1.10.2.js',
'/App/Scripts/jquery.form.js',
'/App/sw.js',
'/App/Scripts/bootstrap.js',

] .. 除了细节和编辑之外的所有内容都会缓存。索引和创建缓存很好。我实际上对后两个缓存感到惊讶,因为它们不是物理文件。我假设 Details 和 Edit 不会缓存,因为没有查询字符串参数它们就无法工作。

是否可以缓存这两个视图?或者有人知道 NuGet 上有什么可以解决这种情况的吗?

4

1 回答 1

0

我在 GET 方法中为我的 Edit 操作更改了这个,如果没有 ID,则返回一个空模型

if (id == null)
{
//return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
return View();
}

这使我可以在没有查询字符串变量的情况下加载编辑页面,并且不会收到错误消息。该页面加载时没有数据,但它允许我缓存它。在这一点上,我想我必须告诉我的服务人员检查页面是否在线。如果是,则正常路由请求,否则查询本地存储并手动将值插入字段。

因此,对于任何使用 MVC 和使用缓存 API 创建支持离线的应用程序的人来说,这都是一个教训。如果未传递 ID 号,请删除在 CRUD 视图中返回错误请求错误的行。只需将空白模型传回视图(返回 View())。这允许您缓存您的页面。您显然需要编写代码来处理页面加载时执行的代码中的离线检索和呈现,但它仍然允许您在在线时使用 MVC/Razor 功能。

需要注意的一件事:“/App/Edit”将缓存。如果您加载“/App/Edit/2”,它将与缓存中的 url 不匹配,因此您将收到一条离线消息。但是,您可以轻松修改您的索引页面以通过邮寄方式发送 ID。只需在页面上有一个表单,该表单将转到“编辑”操作,并将链接更改为带下划线的跨度,并单击将隐藏字段的值设置为 ID。您必须传递另一个隐藏字段,让它知道它需要检索而不是更新(因为控制器有不同的 GET 和 POST 操作用于编辑。GET 操作是无用的,但保留它以进行缓存。您正在检索您通常会在 int 中执行 GET 现在将在 POST 中使用 if 语句来检查您的隐藏字段标志。

于 2019-01-10T20:47:48.707 回答