无法在 Blazor 服务器端应用中使用 OnAfterRenderAsync 中的 JsRuntime.InvokeAsync

Unable to use JsRuntime.InvokeAsync from OnAfterRenderAsync in Blazor Server-Side App

提问人:Dominick 提问时间:10/20/2019 更新时间:10/31/2019 访问量:2652

问:

我有一个 Blazor 应用,在 I 中调用一个需要调用 JavaScript 方法的方法。在早期版本的 Blazor 中,我能够检查该属性以确保我可以进行 JavaScript 调用。但是,在最新版本的 Blazor 中,此属性已被删除。现在,当我尝试从 PlayVideo() 方法进行 JavaScript 调用时,我收到以下错误消息:OnAfterRenderAsyncPlayVideo()context.IsConnected

JavaScript interop calls cannot be issued at this time. This is because the component is being prerendered and the page has not yet loaded in the browser or because the circuit is currently disconnected. Components must wrap any JavaScript interop calls in conditional logic to ensure those interop calls are not attempted during prerendering or while the client is disconnected.

不过,从我所读到的内容来看,从该方法调用 JavaScript 应该可以正常工作,因为它应该被连接。现在有没有办法检查我是否可以进行 JavaScript 调用,因为该属性已被删除?OnAfterRenderAsynccontext.IsConnected

谢谢

JavaScript C# Blazor-server-side

评论


答:

3赞 Chris Boot 10/31/2019 #1

您是否正在检查这是在首次渲染之后?

我这样做的方式如下:

protected async override Task OnAfterRenderAsync(bool firstRender)
{
    if (firstRender)
    {
    // call your JS here
    // await JsRuntime.InvokeVoidAsync 
    }
 }

MS 文档中描述了此行为,希望这会有所帮助。