我有一个简单的应用程序,但由于错误而停止了页面初始化工作
NullReferenceException:对象引用未设置为对象的实例。 Site.Shared.MainLayout.BuildRenderTree(RenderTreeBuilder __builder) 错误: enter image description here
但是代码没有什么复杂的。 App.razor:
<Router AppAssembly="@typeof(Program).Assembly">
<Found Context="routeData">
<RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
</Found>
<NotFound>
<LayoutView Layout="@typeof(MainLayout)">
<p>Sorry, there's nothing at this address.</p>
</LayoutView>
</NotFound>
_Host.cshtml: enter image description here
MainLayout.razor: enter image description here
StartUpService.cs: enter image description here
page.GetPageGlobalAsync()运行良好,我可以在调试模式下传递此方法。 enter image description here
但是在出现此错误之后。而且不知道是什么原因,如何获得有关错误的更多信息。
UPD
如果我将代码更改为:
PageGlobal page = new PageGlobal()
它开始工作,但是OnInitializedAsync是异步方法,为什么我不能在OnInitializedAsync方法中使用async-await方法?
答案 0 :(得分:1)
您的页面正在尝试渲染@pageGlobal.Title
,甚至还没有通过async方法获得它。这就是为什么如果您进行pageGlobal = new PageGlobal();
不会崩溃的原因。
将其更改为此:
<div class="top-row h3">
@if(pageGlobal != null)
{
pageGlobal.Title
}
</div>
感谢@Quango提供了一支班轮:
<div class="top-row h3">
@pageGlobal?.Title
</div>
如果这不能解决问题,请告诉我,我将尽我所能:)
答案 1 :(得分:1)
在进行Task.Run
编程时,不建议使用Async
。尝试在Task.FromResult
中使用GetPageGlobalAsync
而不是Task.Run
public async Task<PageGlobal> GetPageGlobalAsync()
{
return await Task.FromResult( new PageGlobal());
}