我正在Visual Studio中试用Blazor,特别是通过JavaScript调用Blazor代码。我有足够的信心相信我已经准备好了所有正确的库。但是,当我尝试使用invokeMethodAsync调用Blazor方法时,收到消息“未设置.net呼叫调度程序”。在我的Index.Html文件中,我有以下内容:
<script>
DotNet.invokeMethodAsync("BlazorFour.App", "HelloYou").then(data => alert(data), reason => alert(reason));
</script>
(生成错误消息的是警报(原因)
我已经在我的Blazor项目中添加了一个类文件,它包含以下内容:
using Microsoft.JSInterop;
using System.Threading.Tasks;
public class HelloWorld
{
[JSInvokable]
public static Task<string> HelloYou()
{
return Task.FromResult("Hello, ");
}
}
我已经使用Visual Studio中的所有模板和dotnet -new blazor命令行实用程序来创建我的起点,但是在所有项目中都得到相同的消息。在我看来,我似乎在这里缺少一些基本知识。
答案 0 :(得分:3)
Peter Vogel: 如果您可以从JavaScript代码中调用Blazor C#方法,那就太好了。现在,这还不太可能:仅仅从JavaScript调用Blazor C#是行不通的(您会收到一条有关呼叫调度程序不可用的消息)。
但是,一旦您的Blazor代码运行后,您可以做的是,从C#代码中调用JavaScript代码。完成此操作后,您的JavaScript代码可以依次调用Blazor代码。
希望这可以解决问题...
答案 1 :(得分:0)
我想这是一个计时问题,并非所有内容都已加载/初始化。
您是否尝试过将js代码放在按钮onclick事件中?
答案 2 :(得分:0)
我尝试了setTimeout(延迟5000毫秒),它为我工作。(当然,不需要每次都使用setTimeout,只是第一次)。
例如setTimeout(DotNet.invokeMethod(...),5000);
答案 3 :(得分:0)
我正在使用服务器端刀片
我遇到了js错误 未设置.NET呼叫调度程序
是的..看起来Blazor尚未初始化。.
不喜欢超时 ..似乎很hacky,并且UI太长了
不愿意从C#代码中调用JavaScript代码。完成此操作后,您的JavaScript代码可以依次调用Blazor代码。' ..看起来又很黑
这对我有用..
async function myBlazoryFunctionThing() {
// see https://sourcegraph.com/github.com/aspnet/AspNetCore@bd65275148abc9b07a3b59797a88d485341152bf/-/blob/src/Components/Web.JS/src/Boot.Server.ts#L41:9
await window.Blazor.reconnect();
..now it's safe to do my stuff
}
它“似乎”认为 Blazor.reconnect()将重新使用现有连接(如果存在)
...因此实际上并不是“ 重新连接”(因此,“似乎”没有太多开销;-))
答案 4 :(得分:0)
使用 Microsoft.JSInterop;
[Inject] protected IJSRuntime JSRuntime { get;放; }
从您的 blazor 函数中从此方法调用此函数
await JSRuntime.InvokeAsync<object>("fnToJavascriptCall", DotNetObjectReference.Create(this));
在 blazor 文件中创建此函数
[JSInvokable]
public async Task fnToCallFromJavascript(int param1, int param2)
{
//Do some stuff
StateHasChanged();
}
在你的 javascript 文件中
var fnToJavascriptCall = function (param1,currentInstance)
{
//Do your stuff
currentInstance.invokeMethodAsync("fnToCallFromJavascript", param1, param2);
}
答案 5 :(得分:0)
在错误的时间使用 JavaScript 互操作时,可能会收到 No .NET call dispatcher has been set
错误。看看this StackOverflow question。