[英]ASP.Net Core PWA Cache Query
Asp.Net Core 2.2。 我正努力變成一個漸進式Web應用程序MVC應用程序(PWA)使用的Mads克里斯滕森的WebEssentials.AspNetCore.PWA包裝https://github.com/madskristensen/WebEssentials.AspNetCore.ServiceWorker ,我有一些問題,保證一定的工作頁面離線。
該應用程序的主要功能涉及向用戶呈現一系列問題,並將響應保存到數據庫中。 該視圖由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);
}
您想做的當然可以完成。 但是,這需要適度的“繁重”
Mads PWA實用程序雖然效果很好,但是確實可以使您遠離服務工作者和清單文件。
您需要設置清單以緩存“問題”頁面。 這將告訴PWA繼續進行操作,並自動在用戶的設備上緩存頁面,而無需用戶訪問過該頁面。 這樣,當他們離線時,它將在最終瀏覽到該頁面時顯示。
但是,如果用戶處於脫機狀態,則用戶提交數據涉及兩件事:將響應值存儲到本地存儲(不太困難),然后在設備在線時觸發事件來同步用戶的瀏覽器本地存儲,然后將該數據發送到遠程(您的)數據庫(因為涉及很多,因此很困難)。
希望能有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.