我知道我们可以通过调用方法DotNet. invokeMethodAsync从JavaScript中更改Blazor中的C#属性值。我有以下工作,但在此方法中,我还想调用一个非静态方法。
JS文件:
[script.js]
function ChangeContentJS() {
DotNet.invokeMethodAsync('InvokeFromJsApp', "ChangeParaContentValue", "New Content");
}
剃刀页:
[Index.razor]
@page "/"
@inject IJSRuntime JSRuntime
<h1>Change C# property value from JavaScript</h1>
<br />
<button @onclick='ButtonClickHandler'>Change Content - JS</button>
<br />
<p>@ParaContent</p>
@code {
public static string ParaContent = "Some Text Content";
public async Task ButtonClickHandler()
{
await JSRuntime.InvokeAsync<string>("ChangeContentJS");
}
[JSInvokable]
public static void ChangeParaContentValue(string value)
{
ParaContent = value;
RunNewCode(); //DOESNT WORK AS ITS A NON-STATIC METHOD
}
public void RunNewCode()
{
jsRuntime.InvokeVoidAsync("RunFunction");
}
}
我试图在一个静态方法中运行一个非静态方法(在BLAZOR应用程序中)。我如何调用这个方法?
我尝试将以下方法设置为静态,并得到以下错误:
public static void RunNewCode()
{
jsRuntime.InvokeVoidAsync("RunFunction");
}
CS 0120:非静态字段、方法或属性“JSRRuntime”需要对象引用
如何使其成为静态:@注入IJSRuttime JSRuttime
2条答案
按热度按时间c3frrgcw1#
这在文献中有描述
summery:为更新创建一个静态
Action
,并注册本地示例(not测试)
注意:即使组件没有加载(即没有示例),您仍然可以调用JSInvokable方法,这一点非常重要。这可能会导致未定义的行为!
编辑:由于异步
InvokeVoidAsync
方法,更改为async Task
ffdz8vbo2#
你可以试试这个方法。它似乎对我有用,但我不知道这是不是一件好事。