Cache API с MVC Views
У меня есть базовая форма MVC, и я пытаюсь использовать Javascript Cache API для кэширования всех моих файлов CSS, JS, HTML, чтобы у пользователей (людей в поле) не было надежного доступа, они все равно могли использовать мой веб форма. Очевидно, что я использую IndexedDB и сервисных работников для проверки соединения и локального сохранения, когда соединение недоступно, и синхронизации, когда оно доступно.
Я прошел некоторые уроки, и все кажется простым при работе с кэшированием реальных, физических файлов (css, html, js). MVC странный, хотя, так как вы пойдете. Я создал базовые представления 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, которое решает эту ситуацию?
1 ответ
Я изменил это в методе GET для моего действия Edit, чтобы оно возвращало пустую модель, если не было идентификатора
if (id == null)
{
//return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
return View();
}
Это позволило мне загрузить страницу редактирования без переменной строки запроса и не получить сообщение об ошибке. Страница загружается без данных, но она позволяет мне ее кешировать. На данный момент, я полагаю, мне придется сказать своему сервисному работнику, чтобы проверить, находится ли страница в сети. Если это так, направьте запрос в обычном режиме, иначе запросите локальное хранилище и вручную вставьте значения в поля.
Так что пусть это станет уроком для всех, кто создает автономные приложения с MVC и использует Cache API. Избавьтесь от строк, которые возвращают ошибочные запросы в ваших представлениях CRUD, если идентификационные номера не переданы. Просто верните пустую модель в представление (верните View()). Это позволяет вам кэшировать ваши страницы. И вам, очевидно, потребуется написать код для обработки автономного поиска и представления в коде, который выполняется при загрузке страницы, но он все равно позволит вам использовать функции MVC/Razor, когда он-лайн.
Стоит отметить: "/App/Edit" будет кешироваться. Если вы загрузите "/App/Edit/2", он не будет совпадать с URL-адресом в вашем кэше, поэтому вы получите автономное сообщение. Тем не менее, вы можете легко изменить свою страницу индекса, чтобы отправить идентификатор по почте. Просто создайте на странице форму, которая переходит к действию "Изменить", и измените ссылку на подчеркнутый интервал с помощью щелчка, который устанавливает значение скрытого поля для идентификатора. Вам нужно будет передать другое скрытое поле, чтобы сообщить ему, что его нужно получить вместо обновления (поскольку контроллер имеет различные действия GET AND POST для редактирования. Действие GET бесполезно, но сохраните его для кэширования. Вы получаете извлечение то, что вы обычно выполняете в GET, теперь будет выполняться в POST с помощью оператора if для проверки вашего флага скрытого поля.