gpt4 book ai didi

javascript - 从 Blazor 中由 Javascript DotNet.invokeMethodAsync 调用的静态方法调用 C# 非静态方法

转载 作者:行者123 更新时间:2023-12-05 00:34:48 25 4
gpt4 key购买 nike

我知道我们可以通过调用 DotNet.invokeMethodAsync 方法从 JavaScript 更改 Blazor 中的 C# 属性值。我有以下工作,但在这个方法中我还想调用一个非静态方法。
JS 文件:

[script.js]

function ChangeContentJS() {
DotNet.invokeMethodAsync('InvokeFromJsApp', "ChangeParaContentValue", "New Content");
}
Razor 页面:
     [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");
}

CS0120: An object reference is required for the nonstatic field,method, or property 'JSRuntime'


我如何使这个静态:@inject IJSRuntime JSRuntime

最佳答案

这实际上是描述 in the docs
夏天的:
创建静态Action更新并注册本地实例

private static Func<string, Task> ChangeParaContentActionAsync;

private async Task LocalChangeParaContentValueAsync(string value)
{
ParaContent = value;
await jsRuntime.InvokeVoidAsync("RunFunction");
}

protected override void OnInitialized()
{
base.OnInitialized();
ChangeParaContentActionAsync= LocalChangeParaContentValueAsync;
}

[JSInvokable]
public static async Task ChangeParaContentValue(string value)
{
await ChangeParaContentActionAsync.Invoke(value);
}
(未测试)
注意重要的是要记住,即使组件没有加载(即没有实例),您仍然可以调用 JSInvokable 方法。这可能会推断出未定义的行为!
编辑:更改为 async Task , 由于异步 InvokeVoidAsync方法

关于javascript - 从 Blazor 中由 Javascript DotNet.invokeMethodAsync 调用的静态方法调用 C# 非静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66385844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com