Soweit ich weiß, können wir einen C#-Eigenschaftswert in Blazor von JavaScript aus ändern, indem wir die Methode DotNet.invokeMethodAsync aufrufen. Ich habe die folgenden Funktionen, aber in dieser Methode möchte ich auch eine nicht statische Methode aufrufen.
JS-Datei:
[script.js]
function ChangeContentJS() {
DotNet.invokeMethodAsync('InvokeFromJsApp', "ChangeParaContentValue", "New Content");
}
Rasierer Seite:
[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");
}
}
Ich versuche, eine nicht statische Methode in einer statischen Methode auszuführen (IN BLAZOR APPLICATION). Wie kann ich diese Methode aufrufen?
Ich habe versucht, die folgende Methode statisch zu machen und habe den folgenden Fehler erhalten:
public static void RunNewCode()
{
jsRuntime.InvokeVoidAsync("RunFunction");
}
CS0120: Für das nicht statische Feld, die Methode oder die Eigenschaft 'JSRuntime' ist eine Objektreferenz erforderlich
Wie mache ich das statisch: @inject IJSRuntime JSRuntime
Das ist eigentlich in den Dokumenten beschrieben
Summery: Erstellen Sie eine statische Action
für das Update und registrieren Sie die lokale Instanz
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);
}
(nicht getestet)
ANMERKUNG Denken Sie daran, dass Sie die Methode JSInvokable auch dann aufrufen können, wenn die Komponente nicht geladen ist (dh keine Instanz). Dies könnte auf undefiniertes Verhalten schließen!
edit: geändert zu async Task
, wegen der asynchronen InvokeVoidAsync
Methode
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen