В Blazor Server-Side, как я могу определить, пытается ли пользователь выйти за пределы текущей страницы? - PullRequest
0 голосов
/ 17 марта 2020

Я работаю над ASP. NET Core 3.1 Blazor Серверным приложением, в котором есть компонент Blazor с EditForm. Я хочу предупредить пользователя о том, что у него есть несохраненные данные, если он попытается перейти за пределы страницы (т.е. нажать кнопку «Назад» в браузере или выбрать пункт меню «Навигация», который загружает другую страницу в том же приложении).

I прочитайте сообщения об использовании javascript window.onbeforeunload, но я не был уверен, что вызов javascript на стороне сервера Blazor испортит соединение SignalR.

У меня также есть чтение сообщений об использовании CircuitHandler, но я не уверен, изменилась ли схема SignalR, если пользователь просто переходит на другую страницу в том же приложении.

Любые рекомендации о том, как наилучшим образом справиться с этим требованием?

1 Ответ

1 голос
/ 18 марта 2020

Я предполагаю, что намеренно делать это только для программной c навигации, поскольку было бы невозможно заблокировать навигацию, которая происходит, когда люди нажимают на теги. Для Blazor Server logi c должен работать асинхронно, поэтому событие JS нельзя отменить. Событие для Blazor WebAssembly или любой JS основанной SPA-инфраструктуры, не имеет смысла блокировать щелчки по тегам, поскольку браузеры не всегда будут учитывать ваши намерения (например, если пользователь щелкает правой кнопкой мыши и выбирает Открыть в новой вкладке) ).

SteveSandersonMS

См. Также это и это

Как вы можете видите, мало что можно сделать в этом отношении. Тем не менее, вы должны разрабатывать свои страницы таким образом, чтобы вы могли как можно больше контролировать действия пользователей, включая хорошую идею для сохранения данных, введенных в формы, в локальном хранилище и извлечения их в таких случаях, как пользователь внезапно выйдите из приложения и т. д. c.

Примечание. Вы можете использовать JSInterop с SignalR. Нет проблем.

Примечание. CircuitHandler управляет жизненным циклом соединения через веб-сокет и может только частично соответствовать вашим требованиям.

...