Blazor JS interop无法将参数传递给C#方法



我试图从Blazor中的JS调用一个C#方法,但无法将参数传递给它。

代码如下:

<button class="m-2 btn btn-secondary" @onclick="FindMultiplication">Show Sum</button>
public async Task FindMultiplication()
{
await JSRuntime.InvokeVoidAsync("CallCalculateMultiplication", DotNetObjectReference.Create(this), 1, 2);
}
[JSInvokable]
public int CalculateMultiplication(int no1, int no2)
{
int multiplication = no1 * no2;
return multiplication;
}

JS:

function CallCalculateMultiplication(obj, no1, no2) 
{
var valueR = obj.invokeMethodAsync("CalculateMultiplication", no1, no2);
}

问题发生在未调用Blazor组件的CalculateMultiplication方法时。

我还注意到,如果我不向CalculateMultiplication方法传递任何参数,那么它就会被调用。以下更改后的代码有效:

[JSInvokable]
public int CalculateMultiplication()
{
//int multiplication = no1 * no2;
return 2;
}
function CallCalculateMultiplication(obj, no1, no2) 
{
var valueR = obj.invokeMethodAsync("CalculateMultiplication");
}

为什么它是快乐的?我已经看到,这曾经在Blazor 3.1中起作用,因为这个Youtube视频实现了同样的东西(在10点后检查(,但现在不行了。所以我的问题是,我应该如何发送参数来实例化剃刀组件C#方法?

我发现用JavaScript调用C#方法时,需要将参数值解析为int。JS函数的更新代码如下:

function CallCalculateMultiplication(obj, no1, no2) 
{
var valueR = obj.invokeMethodAsync("CalculateMultiplication", parseInt(no1), parseInt(no2));
valueR.then(function (result) {
// Print the result of the promise
alert(result.toString());
});
}

此外,结果是一个JavaScript承诺,需要处理如下:

valueR.then(function (result) {
// Print the result of the promise
alert(result);
});

相关内容

  • 没有找到相关文章

最新更新