在Blazor应用程序中,当使用<NavigationLock>
而导航时,会出现两次询问的问题。这是因为NavigationLock
使用了JavaScript的beforeunload
事件来检测用户是否真的要离开页面,而这个事件本身就会导致浏览器出现两个询问。如果不希望出现这个问题,您可以尝试以下解决方案:
event.StopImmediatePropagation()
来预防冒泡, 即:@inject NavigationManager NavigationManager
@implements IDisposable
@code{
private void ConfirmNavigation(MouseEventArgs args)
{
var confirm = NavigationManager.NavigateTo("anotherpage");
if(!confirm) args.StopImmediatePropagation();
}
public void Dispose()
{
JSRuntime.InvokeVoidAsync("preventNavigationPrompt.stop");
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if(firstRender)
{
await JSRuntime.InvokeVoidAsync("preventNavigationPrompt.init");
}
}
}
beforeunload
事件中抛出'NavigationCanceledException'异常.这两种方式都可以避免出现两次询问的问题。