我正在使用具有Blazor组件和EditForm的ASP.NET Core 3.1 Blazor服务器端应用程序。我想警告用户,如果他们尝试跳出页面(即,单击浏览器的后退按钮或选择在同一应用程序中加载另一个页面的Nav菜单),则他们有未保存的数据。
我有关于使用javascript window.onbeforeunload的read posts的信息,但不确定在Blazor服务器端调用javascript是否会弄乱SignalR连接。
我也有关于使用CircuitHandler的read posts,但是我不确定如果用户只是移动到同一应用程序中的另一个页面,SignalR电路是否会更改。
关于如何最好地处理此要求的任何建议?
最佳答案
我猜这只是出于程序设计导航的目的,因为无法阻止人们单击标签时发生的导航。对于Blazor Server,逻辑必须异步运行,因此无法取消JS事件。 Blazor WebAssembly或任何基于JS的SPA框架的事件,阻止对标签的点击没有意义,因为浏览器并不总是会满足您的意图(例如,如果用户右键单击并选择在新选项卡中打开)。
SteveSandersonMS
另请参见this和this
如您所见,在这方面没有什么可以做的。但是,您应该以一种可以对用户的操作进行尽可能多的控制的方式来设计页面,包括将在表单中输入的数据保存在本地存储中并在用户(例如用户)这种情况下进行检索的好主意。突然退出您的应用程序,等等。
注意:您可以将JSInterop与SignalR一起使用。没问题。
注意:CircuitHandler处理Websocket连接的生命周期,并且可能仅部分满足您的要求。
关于javascript - 在Blazor服务器端,如何检测用户是否尝试导航到当前页面之外,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60728881/