Blazor Navigationmanager 在 locationchanged 上取消导航

Blazor Navigationmanager cancel navigation on locationchanged

问题:

Blazor 上有取消导航的方法吗?

让我们假设一个简单的 a href 像这样:

<a href="/some/other/blazor/spa/page">Go</a>

我想取消导航(例如,如果我们正在编辑表单)

我试过的。

通过 JS

我通过 JSInterop 设置 onbeforeunload dom 委托:

window.onbeforeunload = function(){
        return 'Vols abandonar aquesta pàgina?';
      };

但 blazor 绕过了它。

通过位置已更改

我尝试在 locationchanged 事件上拦截导航失败:

@implements IDisposable
@inject NavigationManager NavigationManager

...

protected override void OnInitialized()
{
    NavigationManager.LocationChanged += HandleLocationChanged;
}

private void HandleLocationChanged(object sender, LocationChangedEventArgs e)
{
    // Cancel Navigation Here
}

public void Dispose()
{
    NavigationManager.LocationChanged -= HandleLocationChanged;
}

目前没有,正在针对 .NET V5 讨论此功能 - 并且有一个社区贡献拉取请求,因此希望能够加入。https://github.com/dotnet/aspnetcore/pull/24417

当您在 Blazor 中导航时页面不会更改,因此不会卸载以触发 onbeforeunload。

您是否尝试过将您的 js 文件放入 index.html 或 _host.cshtml 页面?

更新@PeterMorris 的回答。

自 2021 年 5 月 17 日起,NavigationManger 的位置更改事件现已提交给 .NET 6.0。我希望可以在应用程序中在全局级别捕获此事件。

https://github.com/dotnet/aspnetcore/issues/14962