大佬教程收集整理的这篇文章主要介绍了从 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,请注明来意。