首页 > 解决方案 > 是否添加可选@?

问题描述

两个版本都有效,但哪个是正确的选择?这个?

<button type="button @onclick="NavigateToHome">

或者这个(注意额外的@)?

<button type="button @onclick="@NavigateToHome">

标签: blazor

解决方案


在 Blazor 框架开发的早期阶段,我们必须@在方法名称前面加上符号,以告诉编译器给定属性的值,例如 onclick 是 C# 可执行代码。

它看起来像这样:onclick="@NavigateToHome"

后来,引入了编译器指令,例如@onclick编译器指令。

结果,此约束已被删除,您只能像这样使用方法的名称NavigateToHome

@onclick="NavigateToHome"

无需告诉编译器这NavigateToHome是在单击元素时应调用的 C# 方法。

@onclick编译器指令的引入也对和进行了区分onclick。下面的代码示例演示了这个想法:

<button type="button" onclick="alert("Alert...");">Click me now</button> 

如果您现在单击该按钮,将显示警报窗口。换句话说,JavaScript 被执行。

据我所知,是 Daniel Roth 在 Blazor 的一个预览中说他们不会强制移除该@标志。换句话说,它是向后兼容的。所以你可以使用这两种结构。出于习惯,我总是使用这个@标志。有一段时间我试图教自己不要使用它,但为时已晚。由于您是 Blazor 新手,因此最好不要@从一开始就使用该标志。

但是请注意,该@符号必须与 lambda 表达式一起使用,例如:@onclick="@( (args) => NavigateToHome(args))"

重要的是要记住这@onclick是一个编译器指令,指示编译器创建用于调用“NavigateToHome”方法的管道。

但是如果你使用一个value属性,例如:

<input type="text' value="@<property-name>"

属性名称必须始终以@符号开头,该符号指示编译器创建管道以调用方法(可执行 C# 代码)。如果不这样做,将导致 value 属性被设置为属性标识符的字符串值。


推荐阅读