将数组传递给Blazor的IJSRuntime.InvokeAsync

8

我想知道将数组传递给 IJSRuntime.InvokeAsync 的最佳方式是什么。
我遇到的问题是,由于 InvokeAsync 具有开放的参数列表,并且不知道您是否只传递了相同类型的参数或数组,因此 blazor 将数组的每个元素作为参数传递给 javascript 函数。

目前,我只使用第二个参数,例如 InvokeAsync("functionname", array, false)

还有其他建议吗?更好的解决方案?

1个回答

11

你要么将数组转换为 object*,要么直接调用扩展方法:

var array = Array.Empty<Baz>();
// Casting to object
JS.InvokeAsync<Foo>("bar", (object)array);

// Explicitly call the extension method:
JSRuntimeExtensions.InvokeAsync<Foo>(JS, "bar", array);

或者直接使用它认为你要调用的重载函数:
JS.InvokeAsync<Foo>("bar", new object[] { array });

*根据我有限的C#重载决策知识。


1
混淆的原因是JSRuntime将参数作为json传递。因此,如果只有一个数组参数,我切换到传递new[] { array } - fvetsch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接