程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了从 Javascript DotNet.invokeMethodAsync 调用的 Blazor 中的静态方法调用 C# 非静态方法大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决从 Javascript DotNet.invokeMethodAsync 调用的 Blazor 中的静态方法调用 C# 非静态方法?

开发过程中遇到从 Javascript DotNet.invokeMethodAsync 调用的 Blazor 中的静态方法调用 C# 非静态方法的问题如何解决?下面主要结合日常开发的经验,给出你关于从 Javascript DotNet.invokeMethodAsync 调用的 Blazor 中的静态方法调用 C# 非静态方法的解决方法建议,希望对你解决从 Javascript DotNet.invokeMethodAsync 调用的 Blazor 中的静态方法调用 C# 非静态方法有所启发或帮助;

我知道我们可以通过调用 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");
            }

CS0120:非静态字段需要对象引用, 方法或属性 '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 DotNet.invokeMethodAsync 调用的 Blazor 中的静态方法调用 C# 非静态方法全部内容,希望文章能够帮你解决从 Javascript DotNet.invokeMethodAsync 调用的 Blazor 中的静态方法调用 C# 非静态方法所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。