I'm working on a Blazor project where I need to call a .NET method from JavaScript, but I'm encountering some confusion with the sequence of method calls. Here’s a simplified version of my code:
@page "/call-dotnet-2"@implements IDisposable@inject IJSRuntime JS<PageTitle>Call .NET 2</PageTitle><h1>Call .NET Example 2</h1><p><label> Name: <input @bind="name" /></label></p><p><button @onclick="TriggerDotNetInstanceMethod"> Trigger .NET instance method</button></p><p> @result</p>@code { private string? name; private string? result; private DotNetObjectReference<CallDotnet2>? objRef; protected override void OnInitialized() { objRef = DotNetObjectReference.Create(this); } public async Task TriggerDotNetInstanceMethod() { result = await JS.InvokeAsync<string>("sayHello1", objRef); } [JSInvokable] public string GetHelloMessage() => $"Hello, {name}!"; public void Dispose() => objRef?.Dispose();}Javascript code:
<script> window.sayHello1 = (dotNetHelper) => { return dotNetHelper.invokeMethodAsync('GetHelloMessage'); };</script>I need to call a .NET method from the browser using JavaScript (for example, via the browser console or an event handler of a JavaScript slider library). However, my current implementation shows that the call is being made from .NET to JavaScript and then back to .NET (.NET -> JavaScript -> .NET), which isn't what I intend.