Blazor Navigationmanager 取消在 locationchanged 上的导航

Posted

技术标签:

【中文标题】Blazor Navigationmanager 取消在 locationchanged 上的导航【英文标题】:Blazor Navigationmanager cancel navigation on locationchanged 【发布时间】:2020-11-21 03:13:35 【问题描述】:

问题:

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;

【问题讨论】:

【参考方案1】:

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

在 Blazor 中导航时页面不会更改,因此不会为了触发 onbeforeunload 而卸载。

【讨论】:

“有一个社区贡献拉取请求,所以希望能加入。” ? 对此的简短更新:预计将在 .net 6 中提供 不幸的是,看起来这最快要等到 .net 7。【参考方案2】:

更新到@PeterMorris 的答案。

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

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

【讨论】:

@daniherrera 哈哈,深夜编码。现在修复它:)【参考方案3】:

你试过把你的 js 文件放到 index.html 或 _host.cshtml 页面吗?

【讨论】:

以上是关于Blazor Navigationmanager 取消在 locationchanged 上的导航的主要内容,如果未能解决你的问题,请参考以下文章

Blazor 页面到 MVC 页面

如何在 Quartz.NET 作业中注入 NavigationManager?

Blazor University (27)路由 —— 检测导航事件

Blazor University (26)路由 —— 通过代码导航

用NavigationManager实现订单的列表和新增页面之间的导航

滚动单击不适用于 NavigationManager.NavigateTo,我无法使用 href,因为我需要 forceLoad 功能