Сборка не содержит общедоступного вызываемого метода с [JSInvokableAttribute]
Мы используем Blazor WebAssembly, и я хочу вызвать нестатический метод в моем файле Index.razor с помощью JavaScript.
JavaScript:
(function () {
// keydown event
window.addEventListener("keydown", function (e) {
DotNet.invokeMethodAsync('MyBlazorWebAssemblyApp.Client', 'MyMethod');
});
})();
Index.razor:
@page "/"
@inject HttpClient Http
@code {
// [...]
[JSInvokable]
public async Task MyMethod()
{
var lResponse = await Http.GetFromJsonAsync<object>("Controller/Action");
}
}
Когда я выполняю код нажатием клавиши, инструменты разработчика в Microsoft Edge показывают мне следующую ошибку:
blazor.webassembly.js:1 System.ArgumentException: сборка MyBlazorWebAssemblyApp.Client не содержит общедоступного вызываемого метода с [JSInvokableAttribute("MyMethod")].
Когда я заменяю атрибут [JSInvokable]
от [JSInvokableAttribute("MyMethod")]
то появляется та же ошибка.
Как я могу исправить эту проблему?
3 ответа
Теперь он работает сам. Вот код:
JavaScript:
var GLOBAL = {};
GLOBAL.DotNetReference = null;
GLOBAL.SetDotnetReference = function (pDotNetReference) {
if (GLOBAL.DotNetReference === null)
{
GLOBAL.DotNetReference = pDotNetReference;
}
};
(function () {
// keydown event
window.addEventListener("keydown", function (e) {
GLOBAL.DotNetReference.invokeMethodAsync('MyMethod');
});
})();
Index.razor:
@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");
}
}
Вы должны упомянуть<<Namespace>>.<<TypeName>>.<<MethodName>>
Важно: метод C# должен быть статическим
window.addEventListener("keydown", async function (e) {
await DotNet.invokeMethodAsync('MyBlazorWebAssemblyApp.Client', 'MyMethod');
});
Если вы ознакомитесь с документацией Microsoft по следующей ссылке:
https://docs.microsoft.com/en-gb/aspnet/core/blazor/call-dotnet-from-javascript?view=aspnetcore-3.1
Это отличается от вашего примера следующим образом:
Кажется, ваш JavaScript пытается вызвать статический метод.NET.
Ваш код C# не является статическим методом.