我正在使用 VS2022 创建 Blazor Web 应用程序。以下是项目概述:
在客户端项目的代码部分使用 NavigationManager 时,我收到 Exception_WasThrown 错误:
这是 BlazorApp.Client 中的
Home.razor
内容:
@page "/"
@inject NavigationManager NavigationManager
<PageTitle>Home</PageTitle>
<h1>Hello, world!</h1>
Welcome to your new app.
@code {
protected override void OnInitialized()
{
NavigationManager.NavigateTo("/weather");
}
}
我已经添加了这个:
app.MapRazorComponents<App>()
.AddInteractiveWebAssemblyRenderMode()
.AddAdditionalAssemblies(typeof(BlazorApp1.Client._Imports).Assembly);
到 BlazorApp 项目中的
Program.cs
,我已在客户端项目中更新了我的 Routes.razor
,如下所示:
<Router AppAssembly="typeof(Program).Assembly" AdditionalAssemblies="new[] { typeof(Client._Imports).Assembly }">
<Found Context="routeData">
<RouteView RouteData="routeData" DefaultLayout="typeof(Layout.MainLayout)" />
<FocusOnNavigate RouteData="routeData" Selector="h1" />
</Found>
</Router>
我这里缺少什么吗?
谢谢!
得到OP的确认,使用
OnAfterRender
代替OnInitialized
可以解决问题。根据我的测试,当异常发生时,我可以按F5继续运行应用程序,最终导航将完成,因此由于初始化和初始化之间的冲突,恐怕该异常有点类似于第一次机会异常渲染。这样使用OnAfterRender
就可以避免这种冲突。
protected override void OnAfterRender(bool firstRender)
{
if (firstRender){
NavigationManager.NavigateTo("/weather");
}
}