繁体   English   中英

具有MVC视图的缓存API

[英]Cache API with MVC Views

我有一个基本的MVC表单,并且我一直在尝试使用Javascript Cache API来缓存我的所有CSS,JS,HTML文件,以便当用户(现场人员)没有可靠的访问权限时,他们仍然可以使用我的网站形成。 显然,我也在使用IndexedDB和服务工作者检查连接并在连接不可用时在本地保存,在连接可用时进行同步。

我已经看过一些教程,在处理缓存实际的物理文件(css,html,js)时,一切似乎都很简单。 由于您正在路由,所以MVC很奇怪。 我创建了基础索引,创建,编辑,详细信息视图。 当我创建要缓存的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视图中返回错误请求错误的行。 只需将空白模型传递回视图(返回View())。 这使您可以缓存页面。 而且,显然您需要编写代码来处理页面加载时执行的代码中的脱机检索和演示,但仍允许您在线使用MVC / Razor功能。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM