首页 > 解决方案 > Blazor 中的不同方法调用

问题描述

我现在正在尝试 Blazor 一段时间,我试图找到关于两者之间区别的解释

<input type="button" onclick="@methodCall()">Something</button>

<input type="button" @onclick="() => methodCall()">Something</button>

为什么在 onclick 和 @ 成为价值的一部分之前,@ 是预期的?

标签: blazor

解决方案


当您将“@”放在“onclick”之前时,您将创建一个编译器指令。如果尚未强制执行,此构造将在未来强制执行。它指示编译器创建一个 EventCallback 对象,该对象提供适当的委托,以处理您分配为 @onclick 指令值的代码。此设置:@onclick="() => methodCall()"告诉编译器生成一个 EventCallback 对象,该对象提供适当的委托来执行 lambda 表达式。请注意,当您想要将值传递给 lambda 表达式封装的方法时,您可以使用此构造,例如:

@onclick="() => methodCall('Hello world')"

无效方法调用(字符串 str){}

如果您不必将值传递给被调用的方法,您应该这样构造@onclick 指令: @onclick="methodCall"或者@onclick="@methodCall" “@”符号告诉编译器@onclick 指令的值是可执行代码,而不仅仅是一个字符串,在这种情况下会触发错误。但正如您所看到的,“@”符号可以省略,并且不会引发错误,因为编译器知道它是一个方法名称,它使用适当的委托为其创建一个 EventCallback 结构对象。

onclick="@methodCall()"是错误的。它告诉 Blazor 创建一个输入 Html 元素,其值应该是名为“methodCall”的 JavaScript 方法,并且应该在 Blazor (C#) 中定义和执行。没有这样的动物。

您可以使用这样的构造:`onclick="methodCall()",在这种情况下,您需要定义一个名为 methodCall 的 JavaSript 方法...

你也可以这样做:onclick="alert('I'm a JavaScript method')"

最重要的是要记住,当您使用 Html 元素属性 onclick 时,它的值应该是 JavaScript 方法。这与@onclick 编译器指令完全不同......

希望这可以帮助...


推荐阅读