Как получить данные о событиях в Blazor / Razor

Я начал с Blazor сегодня, когда уже имел некоторый опыт веб-разработки. Однако кажется, что этого недостаточно. Я хочу получить аргументы события onkeydown, чтобы проверить нажатие клавиши ввода.

Я уже пытался использовать функцию в своем событии для проверки нажатия клавиши в отдельной функции и уже пытался напрямую вставить что-то в событие onkeydown, но ничего не сработало.

Следующее - событие, от которого я хочу получить нажатие клавиши.

<input onkeydown="" bind="@todo.Title" />

person Tubif Fux    schedule 15.05.2019    source источник


Ответы (1)


Вам нужно использовать UIKeyboardEventArgs, что-то вроде передачи события в качестве аргумента в JavaScript.

<p id="p" onclick="doSomething(event);">

В Blazor вы сделаете это следующим образом:

<input type="text" onkeypress="@(e => KeyWasPressed(e))" />

/* For .NET Core 3.0+ as per: https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.components.web.keyboardeventargs?view=aspnetcore-3.1 */
@functions {
  private void KeyWasPressed(KeyboardEventArgs args)
  {
    if (args.Key == "r")
    {
      Console.WriteLine("R was pressed");
    }
  }
}

/* For old .NET Core versions */
@functions {
  private void KeyWasPressed(UIKeyboardEventArgs args)
  {
    if (args.Key == "r")
    {
      Console.WriteLine("R was pressed");
    }
  }
}

Как уже упоминал @Bohring в комментариях, вы все равно получите аргументы события, если пишете onkeypress="@KeyWasPressed"

Подробнее о других аргументах событий можно прочитать здесь: https://visualstudiomagazine.com/articles/2018/10/01/blazor-event-handling.aspx

person Razvan Dumitru    schedule 15.05.2019
comment
Хорошо, похоже, это работает, спасибо. Единственная проблема, с которой я столкнулся сейчас, заключается в том, что мне нужно дважды нажать Enter, чтобы выполнить мой метод. Однако, если я расфокусируюсь, а затем снова щелкну поле для нажатия клавиши ввода, он сработает в первый раз. - person Tubif Fux; 15.05.2019
comment
Вы также можете просто написать onkeypress="@KeyWasPressed". Вы по-прежнему получаете аргументы. - person Bohring; 15.05.2019
comment
Хорошо, теперь решил. Сейчас пользуюсь onkeyup. Работает как шарм. Еще раз спасибо разван - person Tubif Fux; 15.05.2019
comment
Я использую dotnet 3.1.102, и мне пришлось использовать KeyboardEventArgs в качестве типа аргумента события вместо UIKeyboardEventArgs - person anhoppe; 23.02.2020