【问题标题】:Blazor javascript method cannot be called无法调用 Blazor javascript 方法
【发布时间】:2019-10-30 09:30:10
【问题描述】:

我正在尝试使用 JSinterop 从我的 Blazor 组件调用 javascript 函数,但我总是收到此错误:

“未捕获的语法错误:输入意外结束”。

另外,当页面完全加载时会自动调用 javascript 函数,这不是所需的行为,因为我想在单击按钮时触发该函数。

@page "/jsInterop"
@inject IJSRuntime jsRuntime

<h3>JSinterop</h3>

<button type="button" class="btn btn-primary" 
 onclick="@setLocalStorage()">
    Trigger JavaScript Prompt
</button>

@code{

public object setLocalStorage()
{
    return jsRuntime.InvokeAsync<object>("interop.setItem", "username", 
"Aymen");
}
}


window.interop = {

    setItem: function (name, value) {

        window.localStorage[name] = value;
        return value;
    },

};

【问题讨论】:

  • 可能会删除函数调用 setLocalStorage 的括号 - onclick="@setLocalStorage" 会起作用。
  • 嗨@randomSoul,它不起作用,它引发和错误,它说:无法将方法组转换为无委托类型“对象”。

标签: javascript c# blazor javascript-interop


【解决方案1】:

你有一个语法错误,你有 onclick 事件

onclick="@setLocalStorage()"

应该是

@onclick=“@setLocalStorage”

现在所有 Blazor 事件都需要以 @ 为前缀。

您还需要更改单击处理程序的签名,并且应该等待调用。

public async Task setLocalStorage()
{
    await jsRuntime.InvokeAsync<object>("interop.setItem", "username", 
"Aymen");
}

【讨论】:

  • 您忘记添加“async”关键字才能使用“await”@Chris Sainty
猜你喜欢
  • 2019-01-13
  • 2021-06-28
  • 1970-01-01
  • 1970-01-01
  • 2017-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-15
相关资源
最近更新 更多