1

在使用 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 强制转换IJSObjectReferenceIEnumerable,但它也会引发异常:

未处理的异常呈现组件:“无法将‘Microsoft.JSInterop.Implementation.JSObjectReference’类型的对象转换为‘System.Collections.IEnumerable’类型。”

文档解释了如何从 Blazor 调用 JavaScript 方法以及如何调用返回的 JavaScript 对象的方法,但没有提到迭代。

4

0 回答 0