Innerhalb einer Blazor-Komponente möchte ich eine JS-Methode aus dem HTML-Ereignis onclick eines Ankertags aufrufen, also:
<a onclick="window.LoadImage();" class="@CssClass">@DisplayName</a>
Meine JS-Methode ist:
window.LoadImage = () => {
DotNet.invokeMethodAsync('MyProject', 'FireEvent').then();
}
Innerhalb der JS-Methode möchte ich eine statische C # -Methode auslösen, um ein Ereignis auszulösen.
[JSInvokable]
public static void FireEvent()
{
StateEngine.LoadImage(DisplayName, Target);
}
[Parameter]
public string DisplayName { get; set; }
[Parameter]
public string Target { get; set; }
Ich kann die JS-Methode nicht dazu bringen, die C # -Methode zu finden. Ich habe mehrere Namenskonfigurationen für den ersten Parameter ausprobiert, wie z
MyProject (the assembly name)
MyProject.FolderName.ComponentName
FolderName.ComponentName
ComponentName
um ein paar zu nennen. Ich habe auch versucht, Namen durch den zweiten Parameter zu mischen.
Wie soll das funktionieren? Was vermisse ich?
PS Bitte ignorieren Sie das Bit über die Instanzeigenschaften in der statischen Methode. Ich habe eine Problemumgehung dafür, möchte aber den Beitrag nicht überladen.
So wie es aussieht, ist es besser, die Referenz JSInterop zu verwenden, damit Sie auf die Komponenteneigenschaften zugreifen können.
Rasierer
@inject IJSRuntime JS
@implements IDisposable
<a @onclick=Clicked>Click here</a>
@code
{
private DotNetObjecctReference ObjRef;
[JSInvokable]
public void FireEvent()
{
StateEngine.LoadImage(DisplayName, Target);
}
private Task Clicked()
{
return JS.InvokeVoidAsync("window.LoadImage", ObjRef);
}
protected override Task OnInitializedAsync()
{
ObjRef = DotNetObjectReference.Create(this);
}
void IDisposable.Dispose()
{
ObjRef.Dispose();
}
}
JS
window.LoadImage = (dotNetObject) => {
dotNetObject.invokeMethod('FireEvent');
}
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