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
。我希望可以在应用程序中在全局级别捕获此事件。
问题:
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
。我希望可以在应用程序中在全局级别捕获此事件。