在 Blazor 服务器端如何检测用户是否试图离开当前页面
In Blazor Server-Side how can I detect if the user tries to navigate off of the current page
我正在开发一个 ASP.NET Core 3.1 Blazor 服务器端应用程序,它有一个带有 EditForm 的 Blazor 组件。我想警告用户,如果他们尝试离开页面(即单击浏览器后退按钮或选择导航菜单以在同一应用程序中加载另一个页面),他们有未保存的数据。
我 read posts 关于使用 javascript window.onbeforeunload 但我不确定在 Blazor 服务器端调用 javascript 是否会扰乱 SignalR 连接。
我也 关于使用 CircuitHandler,但我不确定如果用户只是移动到同一应用程序中的不同页面,SignalR 电路是否发生了变化。
关于如何最好地处理此要求的任何建议?
I'm guessing it's intentional to only do this for programmatic navigation, since it wouldn't be possible to block navigation that occurs when people click on tags. For Blazor Server, the logic has to run asynchronously so the JS event can't be cancelled. Event for Blazor WebAssembly or any JS-based SPA framework, it doesn't make sense to block clicks on tags, since browsers won't always honour your intentions (e.g., if a user right-clicks and chooses Open in new tab).
如您所见,在这方面能做的不多。但是,您应该以一种可以让您尽可能多地控制用户操作的方式设计您的页面,包括将表单中输入的数据保存在本地存储中的好主意,并在用户访问时检索它突然退出您的应用程序等
注意:您可以将 JSInterop 与 SignalR 一起使用。没问题。
注意:CircuitHandler 处理 websocket 连接的生命周期,可能仅部分满足您的要求。
我正在开发一个 ASP.NET Core 3.1 Blazor 服务器端应用程序,它有一个带有 EditForm 的 Blazor 组件。我想警告用户,如果他们尝试离开页面(即单击浏览器后退按钮或选择导航菜单以在同一应用程序中加载另一个页面),他们有未保存的数据。
我 read posts 关于使用 javascript window.onbeforeunload 但我不确定在 Blazor 服务器端调用 javascript 是否会扰乱 SignalR 连接。
我也
关于如何最好地处理此要求的任何建议?
I'm guessing it's intentional to only do this for programmatic navigation, since it wouldn't be possible to block navigation that occurs when people click on tags. For Blazor Server, the logic has to run asynchronously so the JS event can't be cancelled. Event for Blazor WebAssembly or any JS-based SPA framework, it doesn't make sense to block clicks on tags, since browsers won't always honour your intentions (e.g., if a user right-clicks and chooses Open in new tab).
如您所见,在这方面能做的不多。但是,您应该以一种可以让您尽可能多地控制用户操作的方式设计您的页面,包括将表单中输入的数据保存在本地存储中的好主意,并在用户访问时检索它突然退出您的应用程序等
注意:您可以将 JSInterop 与 SignalR 一起使用。没问题。
注意:CircuitHandler 处理 websocket 连接的生命周期,可能仅部分满足您的要求。