c# - 如何在 Blazor/Razor 中获取事件数据

标签 c# events asp.net-core razor blazor

我今天开始使用 Blazor,同时已经拥有一些 Web 开发经验。 然而这似乎还不够。我想获取 onkeydown 事件的事件参数,以便我可以检查是否有 Enter 键按下。

我已经尝试在我的事件中使用一个函数来检查单独函数中的按键,并且已经尝试直接将某些内容插入到 onkeydown 事件中,但没有任何效果。

以下是我想要从中获取按键的事件。

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

最佳答案

您需要使用UIKeyboardEventArgs,例如将事件作为JavaScript中的参数传递。

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

在 Blazor 中,您将通过以下方式执行此操作:

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

/* For .NET Core 3.0+ as per: https://learn.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

关于c# - 如何在 Blazor/Razor 中获取事件数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56144829/

相关文章:

c# - 为什么我的 C# 事件在没有运行应用程序的情况下在 XAML (WPF) 上触发?

javascript - 寻找图像 onLoad 的替代品

angular - 无法在 Visual Studio 2019 ASP.Net Core 3.1 Angular 项目中调试 Typescript

asp.net-core - 在控制台应用程序中使用 ASP.NET Core 3.1 读取嵌入式资源时出现问题

asp.net-core - ProfileDataRequestContext.RequestedClaimTypes 中缺少子声明

c# - Task.Run 使用自定义线程池

c# - 禁止 XmlSerializer 发出空值类型

c# - 如何延迟像 QTimer::singleShot 这样的 C# Action ?

c# - 在 Diffusion 中更新 JSON 主题(Unified .NET Client Api)

javascript - dispatchEvent() 函数作为参数,执行函数而不是传递它