Sim*_*mon 5 blazor blazor-client-side asp.net-blazor blazor-jsinterop blazor-webassembly
我们使用 Blazor WebAssembly,我想通过 JavaScript 在我的 Index.razor-File 中调用一个非静态方法。
JavaScript:
(function () {
// keydown event
window.addEventListener("keydown", function (e) {
DotNet.invokeMethodAsync('MyBlazorWebAssemblyApp.Client', 'MyMethod');
});
})();
Run Code Online (Sandbox Code Playgroud)
Index.razor:
@page "/"
@inject HttpClient Http
@code {
// [...]
[JSInvokable]
public async Task MyMethod()
{
var lResponse = await Http.GetFromJsonAsync<object>("Controller/Action");
}
}
Run Code Online (Sandbox Code Playgroud)
当我通过 keydown 执行代码时,Microsoft Edge 中的开发人员工具显示以下错误:
blazor.webassembly.js:1 System.ArgumentException:程序集“MyBlazorWebAssemblyApp.Client”不包含具有 [JSInvokableAttribute("MyMethod")] 的公共可调用方法。
当我替换该属性时[JSInvokable]
,[JSInvokableAttribute("MyMethod")]
会出现相同的错误。
我该如何解决这个问题?
Sim*_*mon 21
现在我自己就可以工作了。这是代码:
JavaScript:
var GLOBAL = {};
GLOBAL.DotNetReference = null;
GLOBAL.SetDotnetReference = function (pDotNetReference) {
GLOBAL.DotNetReference = pDotNetReference;
};
(function () {
// keydown event
window.addEventListener("keydown", function (e) {
GLOBAL.DotNetReference.invokeMethodAsync('MyMethod');
});
})();
Run Code Online (Sandbox Code Playgroud)
索引.剃刀:
@page "/"
@inject HttpClient Http
@code {
protected override async Task OnInitializedAsync()
{
var lDotNetReference = DotNetObjectReference.Create(this);
JSRuntime.InvokeVoidAsync("GLOBAL.SetDotnetReference", lDotNetReference);
}
// [...]
[JSInvokable("MyMethod")]
public async Task MyMethod()
{
var lResponse = await Http.GetFromJsonAsync<object>("Controller/Action");
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1610 次 |
最近记录: |