在使用 JS 互操作的 Blazor 组件中,如何迭代 JavaScript 数组类对象?
举个例子:
@inject IJSRuntime _js
@code {
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
var elements = await _js.InvokeAsync<IJSObjectReference>("document.getElementsByClassName", "foo");
// This loop does not compile, because IJSObjectReference is not IEnumerable:
foreach (var x in elements)
{
[...]
}
}
}
}
我尝试使用InvokeAsync<IEnumerable>(...)
,InvokeAsync<IJSObjectReference[]>(...)
和InvokeAsync<IEnumerable<IJSObjectReference>>(...)
,但它们抛出异常:
未处理的异常渲染组件:“执行 JS 互操作时发生异常:无法将 JSON 值转换为 System.Collections.IEnumerable。路径:$ | LineNumber:0 | BytePositionInLine:1 .. 有关更多详细信息,请参阅 InnerException。”
我尝试将 to 强制转换IJSObjectReference
为IEnumerable
,但它也会引发异常:
未处理的异常呈现组件:“无法将‘Microsoft.JSInterop.Implementation.JSObjectReference’类型的对象转换为‘System.Collections.IEnumerable’类型。”
该文档解释了如何从 Blazor 调用 JavaScript 方法以及如何调用返回的 JavaScript 对象的方法,但没有提到迭代。