Blazor invokeMethodAsync找不到方法



我正在使用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();
}

我有另一个.rarzor文件,其中有一个名为GetCodeFromList的方法,我也想使用相同的调用来访问它,但我已经尝试完全删除它,但这并没有解决问题。

您必须将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>

查看此处和此处了解更多信息。

相关内容

  • 没有找到相关文章

最新更新