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

时间:2021-06-19 05:55:14

标签: javascript c# blazor blazor-webassembly

Microsoft docs 解释了如何从带参数的 JS 代码调用组件实例方法。在示例中,JS 文件中的函数通过 IJSRuntime 从 Blazor 组件调用。

// In  razor component
public async Task TriggerDotNetInstanceMethod()
{
    objRef = DotNetObjectReference.Create(this);
    result = await JS.InvokeAsync<string>("sayHello2", objRef, name);
}

[JSInvokable]
public string GetHelloMessage(string passedName) => $"Hello, {passedName}!";

// In JS file.
<script>
   window.sayHello2 = (dotNetHelper, name) => {
   return dotNetHelper.invokeMethodAsync('GetHelloMessage', name);
 };
</script>

我的问题是如何通过事件调用带有来自 JS 文件的参数的 Blazor 组件中的 JSInvokable C# 方法。例如,Google 地图 API 通过 JS 文件中地图内的事件返回带有地址和坐标的响应。我想将这些细节传递给 razor 组件中的非静态方法,以便对它们进行更多处理。

1 个答案:

答案 0 :(得分:-1)

我找到了答案 here

需要一个全局变量并将我们的 DotNetObjectReference 传递给它。然后我们就可以通过这个对象变量调用 invokeMethodAsync 并用参数调用我们的 C# 方法。现在,它对我有用!

var object;

window.JsFunctionHelper = {MapSuccessResponse: function (instance, address) {
       object = instance;
       return instance.invokeMethodAsync("GetAddress", valuesFromApi);
       }
 };

 function getValuesFromApi() {
      .
      .
      .

      object.invokeMethodAsync("GetAddress", valuesFromApi);
 }
相关问题