У меня есть серверное приложение Blazor с двумя кнопками. Первая кнопка вызывает метод MenuOpen
в C#, а вторая вызывает метод TestJSInterop
в C#. Вот код:
@inject IJSRuntime JSRuntime;
<!-- buttons -->
@code {
List<int> tabs = new List<int>();
protected override Task OnAfterRenderAsync(bool firstRender)
{
JSRuntime.InvokeVoidAsync("monacoInit");
return base.OnAfterRenderAsync(firstRender);
}
async Task OpenNewTab(string title)
{
int newId = await JSRuntime.InvokeAsync<int>("addEditorModel", new object[]
{
title, "test", "test", "test"
});
tabs.Add(newId);
await JSRuntime.InvokeVoidAsync("addTab", newId);
}
async Task MenuOpen()
{
await OpenNewTab("testing");
}
async Task TestJSInterop()
{
await JSRuntime.InvokeVoidAsync("console.log", "test");
}
}
В Javascript я добавил console.log
s для каждого метода, который вызывается из C#. Когда я нажимаю кнопку для вызова TestJSInterop
, я получаю в консоли следующий результат:
test
call addEditorModel
call addTab: параметр равен 0
call addEditorModel
call addTab: параметр 0
Когда я нажимаю кнопку для вызова MenuOpen
, я получаю такой результат:
call addEditorModel
call addTab: параметр 1
call addEditorModel
call addTab: параметр 0
call addEditorModel
call addTab: параметр 0
Я знаю, что метод OpenNewTab
C# не вызывается несколько раз, как, например, когда я ставлю точку останова и нажимаю кнопку для вызова TestJSInterop
Я не достигаю точки останова.
Вызов JSRuntime.InvokeVoidAsync
работает правильно в OnAfterRenderAsync
.
Почему у меня такое поведение?