我正在尝试弄清楚为什么我不能在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))
为什么事件没有被触发?
发布于 2022-01-30 06:50:58
正如@user13925483提到的,需要添加:
<script src="_framework/blazor.server.js"></script>
在_Host文件的末尾。
但问题是为什么。来自Microsoft doc
在服务器上的预渲染过程中,不会调用
OnAfterRender和OnAfterRenderAsync。当组件在预渲染之后以交互方式呈现时,将调用这些方法。当应用程序预渲染时:
HTML组件在服务器上执行,以在响应中生成一些静态
即使您创建了空的Blazor服务器项目,您也可以在HTML体末尾的Pages/_Host.cshtml
脚本行中找到:
@page "/"
@namespace WebApplication6Server.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@{
Layout = null;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>WebApplication6Server</title>
<base href="~/" />
<link rel="stylesheet" href="css/bootstrap/bootstrap.min.css" />
<link href="css/site.css" rel="stylesheet" />
<link href="WebApplication6Server.styles.css" rel="stylesheet" />
</head>
<body>
<component type="typeof(App)" render-mode="ServerPrerendered" />
<div id="blazor-error-ui">
<environment include="Staging,Production">
An error has occurred. This application may no longer respond until reloaded.
</environment>
<environment include="Development">
An unhandled exception has occurred. See browser dev tools for details.
</environment>
<a href="" class="reload">Reload</a>
<a class="dismiss"></a>
</div>
<script src="_framework/blazor.server.js"></script> @* <-------- this line *@
</body>
</html>
https://stackoverflow.com/questions/62368154
复制相似问题