【问题标题】:Blazor Navigationmanager cancel navigation on locationchangedBlazor Navigationmanager 取消在 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;
}

【问题讨论】:

    标签: c# .net-core navigation blazor blazor-webassembly


    【解决方案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 页面吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 2011-04-06
      • 1970-01-01
      • 2021-09-21
      • 2022-06-16
      • 2021-09-11
      • 1970-01-01
      相关资源
      最近更新 更多