首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >未触发OnAfterRenderAsync

未触发OnAfterRenderAsync
EN

Stack Overflow用户
提问于 2020-06-14 11:52:10
回答 4查看 1.5K关注 0票数 2

我正在尝试弄清楚为什么我不能在Blazor中获得OnAfterRenderAsync方法。

在尝试了多个选项并查看了Microsoft文档后,我似乎找不到解决方案,我确信我遗漏了一些东西,但我找不出问题所在。

在下面的代码中,调用了OnInit函数,但没有调用呈现函数。

代码语言:javascript
运行
复制
<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文件

代码语言:javascript
运行
复制
<Project Sdk="Microsoft.NET.Sdk.Web">

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

</Project>

这是我的_Host.cshtml

代码语言:javascript
运行
复制
<app>
     <component type="typeof(App)" render-mode="ServerPrerendered" />
</app>

我也尝试过这种方式

代码语言:javascript
运行
复制
@(await Html.RenderComponentAsync<App>(RenderMode.ServerPrerendered))

为什么事件没有被触发?

EN

Stack Overflow用户

发布于 2022-01-30 06:50:58

正如@user13925483提到的,需要添加:

代码语言:javascript
运行
复制
<script src="_framework/blazor.server.js"></script>

在_Host文件的末尾。

但问题是为什么。来自Microsoft doc

在服务器上的预渲染过程中,不会调用

OnAfterRender和OnAfterRenderAsync。当组件在预渲染之后以交互方式呈现时,将调用这些方法。当应用程序预渲染时:

HTML组件在服务器上执行,以在响应中生成一些静态

  1. 标记。在此阶段,不会调用OnAfterRender和OnAfterRenderAsync。
  2. 当Blazor脚本(blazor.webassembly.js或blazor.server.js)在浏览器中启动时,组件将以交互渲染模式重新启动。重新启动组件后,会调用OnAfterRender和OnAfterRenderAsync,因为应用程序不再处于预渲染阶段。

即使您创建了空的Blazor服务器项目,您也可以在HTML体末尾的Pages/_Host.cshtml脚本行中找到:

代码语言:javascript
运行
复制
@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>
票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62368154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档