Можно ли смешивать код Javascript и C# в событии DOM в Blazor? - PullRequest
0 голосов
/ 12 июля 2020

Я пытаюсь добиться следующего в Blazor WebAssembly; Мне нужно иметь возможность прослушивать событие в компоненте и использовать как Javscript, так и код C# следующим образом:

<button onclick="console.log('Showing event from Js: ' + event); @Test()">Test</button>

@code {
   public void Test()
   {
       JSRuntime.InvokeVoidAsync("console.log", "Showing log from C#");
   }
}

Первая проблема заключается в том, что я получаю сообщение об ошибке " не может неявно преобразовать тип void в объект "", поэтому, если я изменю подпись метода Test только для возврата объекта

public object Test()
{
    JSRuntime.InvokeVoidAsync("console.log", "Showing log from C#");
    return null;
}

Приложение компилируется, но после загрузки страницы "Test ()" функция выполняется автоматически, и если я нажму кнопку, она просто выполнит код Javascript, а не оба фрагмента кода.

Я знаю, что должен обрабатывать события в Blazor, добавляя к имени события префикс «@» символ, чтобы вызвать метод C#, и выполнить там код Javascript с помощью взаимодействия, но таким образом я не могу использовать «событие» по умолчанию Javascript, которое мне нужно использовать, вместо Blazor "событийная" версия.

Заранее спасибо!

1 Ответ

1 голос
/ 12 июля 2020

У вас может быть только 1 атрибут onclick, поэтому вызовите метод C ## из JS или вызовите код JS из C#. В обоих случаях вам понадобится Interop, нет поддержки для комбинирования этого способа, которым вы пытаетесь.

функция «Test ()» выполняется автоматически

Да, в onclick="... @Test()" он выполняется при отображении страницы, а не при нажатии кнопки.

...