使用MVC视图缓存API



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

我看过一些教程,在处理缓存实际物理文件(css、html、js)时,一切似乎都很简单。MVC很奇怪,因为你在路由。我创建了basix索引、创建、编辑、详细信息视图。当我创建一个要缓存的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外,所有内容都缓存。索引和创建缓存很好。事实上,我对后两个缓存感到惊讶,因为它们不是物理文件。我假设Details和Edit不缓存,因为它们在没有querystring参数的情况下无法工作。

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

我在编辑操作的GET方法中更改了这一点,以便在没有ID 的情况下返回一个空模型

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

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

因此,让这成为任何使用MVC和Cache API创建离线应用程序的人的一个教训。如果没有传递ID号,就去掉CRUD视图中返回错误请求的行。只需将一个空白模型传递回视图(return view())。这允许您缓存页面。很明显,您需要编写代码来处理页面加载时执行的代码中的脱机检索和表示,但它仍然允许您在联机时使用MVC/Razor功能。

需要注意的一点是:"/App/Edit"将缓存。如果您加载"/App/Edit/2",它将与缓存中的url不匹配,因此您将收到一条脱机消息。但是,您可以很容易地修改您的索引页面以通过邮寄发送ID。只需在页面上创建一个进入"编辑"操作的表单,然后通过onclick将链接更改为带下划线的跨度,将隐藏字段的值设置为ID即可。你必须传递另一个隐藏字段,让它知道它需要检索而不是更新(因为控制器对Edit有不同的GET AND POST操作。GET操作没有用,但保留它用于缓存。你正在检索你通常会在内部执行的GET操作。现在,GET将在POST中使用if语句来检查你的隐藏字段标志。

最新更新