На стороне сервера Blazor у меня есть эта строка кода, которая извлекает сериализованную службу из localstorage
(или sessionstorage
) браузера с помощью взаимодействия JavaScript:
viewData.Cart = await jsInterop.GetJson<Cart>("Cart", BrowserStorageMode.SessionStorage);
Я помещаю десериализованную службу в свойство в службе с настраиваемой областью действия (с именем ViewData
), чтобы в других местах я вводил ViewData
и использовал сохраненную службу.
Как всем известно, эта строка кода, поскольку она использует взаимодействие с JavaScript, не может быть в OnInitialized()
методе жизненного цикла макета, потому что на данном этапе она не работает. поэтому я поместил его в OnAfterRender()
в блоке if (firstRender == true)
.
Проблема в том, что если я хочу получить службу на странице содержимого, поскольку жизненный цикл страницы выполняется раньше, чем страница макета (я проверял это с помощью точек останова), служба на странице содержимого еще недоступна в обоих OnInitialized
и OnAfterRender(firstRender)
.
Этот тест, который я сделал, полезен, когда сайт впервые загружается или пользователь обновляет страницу, потому что я хочу, чтобы корзина пользователя не потерялась. Итак, как решить эту проблему.