Asp.Net Core 2.2。我正在尝试使用Mads Kristensen的WebEsssentials.AspNetCore.PWA软件包https://github.com/madskristensen/WebEssentials.AspNetCore.ServiceWorker将其转换为渐进式Web应用程序(PWA)的MVC应用程序,但是在确保某些页面脱机工作时遇到一些问题。
该应用程序的主要功能涉及向用户呈现一系列问题,并将响应保存到数据库中。该视图由ViewModel填充,该ViewModel查询数据库以显示正确的信息。
我的问题是,由于数据库内容很少更改,我是否可以缓存查询结果,以便整个应用程序都可以脱机工作?如果是这样,那么最佳做法是什么?
我的默认地图路线是controller / action / id,因此当尝试在appsettings.json中使用routesToPreCache时,我无法为新创建的“事件”添加ID,因此它不起作用-我是否错过了一个简单的窍门还是解决方案更复杂?
我的视图控制器如下:
public class PathwayController : Controller
{
private readonly ApplicationDbContext _context;
public PathwayController(ApplicationDbContext context)
{
_context = context;
}
public ActionResult Pathway(int? id, int? index)
{
int currentIndex = index.GetValueOrDefault();
if (currentIndex == 0)
{
ViewBag.NextIndex = 1;
}
else
{
ViewBag.NextIndex = index + 1;
}
PathwayViewModel path = new PathwayViewModel();
var incident = _context.Incident
.Include(i => i.IncidentType)
.FirstOrDefault(m => m.Id == id);
path.Incident = incident;
var stageConditions = _context.StageCondition.Where(x => x.IncidentTypeId == incident.IncidentTypeId)
.Include(s => s.Stage)
.Include(o => o.Stage.Outcome)
.OrderBy(x => x.Id)
.Skip(currentIndex)
.Take(1)
.FirstOrDefault();
path.StageCondition = stageConditions;
// Validation
var stageConditionTest = _context.StageCondition.Where(x => x.IncidentTypeId == incident.IncidentTypeId);
ViewBag.MaxIndex = stageConditionTest.Count();
//save stage to incident
incident.StageId = stageConditions.Stage.Id;
_context.Update(incident);
_context.SaveChanges();
return View(path);
}
答案 0 :(得分:0)
您想做的当然可以完成。但是,这需要适度的“繁重”
Mads PWA实用程序虽然效果很好,但是确实可以使您远离服务工作者和清单文件。
您需要设置清单以缓存“问题”页面。这将告诉PWA继续进行操作,并自动在用户的设备上缓存页面,而无需用户访问过该页面。这样,当他们离线时,它将在他们最终浏览到该页面时显示。
但是,如果用户处于脱机状态,则用户提交数据涉及两件事:将响应值存储到本地存储(不太困难),然后在设备处于活动状态时通过触发事件来同步用户的浏览器本地存储。在线,然后将数据发送到远程(您的)数据库(因为涉及到,所以很困难)。
希望有帮助。