未触发OnAfterRenderAsync

时间:2020-06-14 03:52:10

标签: blazor

我试图弄清楚为什么我无法在Blazor中获得OnAfterRenderAsync方法。

尝试了多个选项并查看Microsoft文档后,我似乎找不到解决方案,我确定我遗漏了一些东西,但我不知道是什么问题。

在下面的代码中,调用了OnInit函数,但未调用渲染器。


<h1>OnInit & OnInitAsync Demo</h1>

@foreach (var item in EventType)
{
    @item
    <hr />
}

@code{
    List<string> EventType = new List<string>();

    protected override void OnInitialized()
    {
        EventType.Add("Initilaized");
    }

    protected override void OnAfterRender(bool firstRender)
    {
        EventType.Add("OnAfterRender is called");
    }

    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        EventType.Add("OnAfterRenderAsync is called");
        await Task.Delay(1000);
    }
}


这是我的.csproj文件


<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

</Project>


这是我的_Host.cshtml


<app>
     <component type="typeof(App)" render-mode="ServerPrerendered" />
</app>

我也尝试过这种方式


@(await Html.RenderComponentAsync<App>(RenderMode.ServerPrerendered))


为什么不触发事件?

3 个答案:

答案 0 :(得分:0)

它们被称为没事,只是没有渲染。

进行一些小的更改,屏幕将不断更新:

protected override async Task OnAfterRenderAsync(bool firstRender)
{
    EventType.Add("OnAfterRenderAsync is called " + firstRender);
    await Task.Delay(1000);
    StateHasChanged();  // inform the system that the screen needs updating
}

答案 1 :(得分:0)

尝试在_Host.cshtml的正文末尾(不是头部)添加以下行:

<script src="_framework/blazor.server.js"></script>

答案 2 :(得分:0)

如果您使用服务器模式,可能您忘记了 Startup.cs 中的 MapBlazorHub

app.UseEndpoints(endpoints =>
        {
            endpoints.MapDefaultControllerRoute();
            endpoints.MapBlazorHub();
            endpoints.MapControllers();
            endpoints.MapFallbackToPage("/_Host");
        });