如果IsActive布尔为true,我有一个span,它应该具有onclick属性。否则,跨度不应具有onclick属性。
例如
@if (IsActive == true)
{
<span @onclick="@(e => Go.DoSomething("please"))">
@s.DisplayText
</span>
}
else
{
<span>
@s.DisplayText
</span>
}
难道没有一种方法可以避免使用三元运算符的重复代码吗?例如
@(IsActive == true ? "add onclick method somehow?" : "")
您可以执行以下操作。
<span @onclick="@(e => { if (IsActive) Go.DoSomething("please");})">
@s
</span>
Lambda表达式是我认为你真正想要的。
添加条件IsActive == true
的更好方法是在Go.DoSomething
方法中。但理想情况下,如果按钮是可点击的,我会使用它,因为我们可以向按钮添加disabled
属性,在您的情况下,您可以在onclick
方法中添加条件。
只是按钮的一个提示,你可以在这个属性中添加你的c#布尔属性,如下所示:
<button disabled="@IsActive">Save</button>
其他答案有点错误。将事件方法注册为lambda和在不必要时不注册事件是有区别的。
如果您将条件移动到lambda函数,那么只要有人单击,您的方法就会运行。它会对你的应用程序的性能产生影响,尤其是如果它是Blazor服务器,因为往返必须发生,而逻辑发生在你的服务器上。
@ondclick=@(Active?() => Go.DoSomething:null)
如果事件未处于活动状态,则不会注册该事件,因此服务器上没有负载。
来自Blazor存储库测试
只想为有类似问题的人添加一些东西:
如果你有比一个跨度更多的HTML代码,并且因为If-else语句而需要它两次,我会创建一个自己的Blazor组件(例如MyComponent.rarzor(并使用组件参数。这样,在if-else语句中就不会有太多重复的代码。