我试图弄清楚为什么我无法在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))
为什么不触发事件?
答案 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");
});