【问题标题】:Blazor invokeMethodAsync cannot find methodBlazor invokeMethodAsync 找不到方法
【发布时间】:2020-07-23 13:19:50
【问题描述】:

我正在使用invokeMethodAsync 从Javascript 调用C# 方法。一天前我让它工作了,但从那以后它就坏了,而且恢复我的更改似乎也无法修复它。

错误:System.ArgumentException: The assembly 'HelloWorld' does not contain a public invokable method with [JSInvokableAttribute("GetCodeFromList")].

JS:

DotNet.invokeMethodAsync('HelloWorld', 'GetCodeFromList')
    .then(data => {
        data.push(result.codeResult.code);
    }
);

result.codeResult.code 是我想在 C# 端接收的号码。我已经确认号码是正确的。

C#:

[JSInvokable]
public void GetCodeFromList(long jsCode)
{
    code = codes.Where(p => p.SecretCode.Equals(jsCode)).FirstOrDefault();
    StateHasChanged();
}

我有另一个 .razor 文件,其中我有一个也称为 GetCodeFromList 的方法,我也希望使用相同的调用可以访问它,但我尝试完全删除它,但这并没有解决问题。

【问题讨论】:

标签: c# blazor webassembly


【解决方案1】:

您必须将 C# 方法更改为静态:

更新答案:您必须将类实例的引用传递给您的 javascript 方法,该方法将使用该方法调用您的方法。

public async Task TriggerDotNetInstanceMethod()
{
    objRef = DotNetObjectReference.Create(this);  <--- this is the instance reference you have to pass
    result = await JS.InvokeAsync<string>("sayHello1", objRef);
}

[JSInvokable]
public void GetCodeFromList(long jsCode)
{
    code = codes.Where(p => p.SecretCode.Equals(jsCode)).FirstOrDefault();
    StateHasChanged();
}

还有 javascript:

<script>
  window.sayHello2 = (dotNetHelper, name) => {
    return dotNetHelper.invokeMethodAsync('GetCodeFromList', name);
  };
</script>

查看herehere 了解更多信息。

【讨论】:

  • 当你不能在静态方法中调用StateHasChanged();时,这段代码如何编译?
猜你喜欢
  • 2022-01-12
  • 2022-11-10
  • 1970-01-01
  • 2020-08-14
  • 2011-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多