Blazor JS互操作-从JavaScript调用C#实例方法

佛朗哥他们有

两个不同的Blazor组件定义了以下实例方法:

[JSInvokable]
public void MyInstanceMethod()
{
...
}

在加载时,他们调用js函数,并将自身传递给js:

await JS.InvokeAsync<object>("jsFunction", new DotNetObjectRef(this));

在js中,传递的.NET对象引用保存在名为_callback的变量中。稍后,JavaScript中发生的事件会回调实例方法

_callback.invokeMethodAsync("MyInstanceMethod");

浏览器控制台失败,并显示以下错误:

blazor.webassembly.js:1 Uncaught (in promise) Error: 
System.InvalidOperationException: 
The assembly 'WebApplication7.Client' contains more than one [JSInvokable] method 
with identifier 'MyInstanceMethod'.
All [JSInvokable] methods within the same assembly must have different identifiers.

顺便说一句,如果只有一个组件具有该方法,一切都会顺利进行。

这是否违反任何OO语言的基本范围功能之一?

有人可以告诉我为什么要求方法(包括实例方法)具有不同的标识符才能成为JSInvokable吗?

如果这是Blazor的限制,是否有解决的计划?

佛朗哥他们有

看来Blazor中有错误。史蒂夫·桑德森Steve Sanderson)


听起来像个虫子。感谢您举报。

要求静态方法具有程序集范围内的唯一标识符是有意义的。但是,实例方法需要程序集范围内的唯一标识符是没有意义的。我们只应要求标识符在您传递的实例类型内唯一。

解决方法是,您可以执行以下操作:

[JSInvokable("SomeUniqueIdentifier")]
public void MyInstanceMethod()
{
...
}

我知道需要这样的解决方法很烦人。我们将修复潜在的错误(最有可能在3.0发布之后)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Blazor JS互操作程序无法将参数传递给C#方法

使用来自 js 的 blazor 互操作调用非静态方法

如何从事件调用返回数据到Blazor中的JS互操作方法

为位于 Blazor 子菜单中的 DOM 元素调用 JS 互操作函数

在Blazor Server中,是否可以保证js互操作调用的顺序?

如何使用Blazor互操作从类型模块的js脚本(生成的TS)中调用函数

从 OnInitializedAsync Blazor 调用 javascript 时出现 JavaScript 互操作错误

Blazor到Javascript字节数组互操作

与Blazor进行JS互操作时找不到窗口的属性

静态扩展如何在Blazor中用于js互操作?

如何在Blazor服务器端的不同组件中调用javascript互操作方法

可以在Blazor中将ElementRef属性设置为javascript互操作返回值吗?

在没有 javascript 互操作的情况下从 Blazor 设置 HTMLMediaElement.playbackRate

Blazor JSInterop 静态与实例 C# 方法

如何从带参数的 JS 文件调用 Blazor 组件中的 C# none 静态方法?

Blazor:从HTML onclick调用的JS函数中调用C#静态方法-为什么JS无法找到该方法?

如何从Blazor调用JS异步方法

Blazor - 从 C# 类调用 JavaScript

使用使用JavaScript互操作导入的JavaScript库将React应用程序移植到Blazor应用程序

使用 JSInterop 调用实例方法 - 使用 JS 在输入字段更改时通知 Blazor

从 Javascript DotNet.invokeMethodAsync 调用的 Blazor 中的静态方法调用 C# 非静态方法

Blazor 服务器端应用程序在重新加载期间抛出“System.InvalidOperationException:此时无法发出 JavaScript 互操作调用。...”

Blazor javascript方法无法调用

与GetNamedPipeClientComputerName的C#互操作

MsiSourceListEnumSources互操作C#

在 Blazor 中使用 JS

Blazor 未从 JS 更新

blazor 组件中的 JS

Blazor 调用 null