onclick的Blazor条件if语句



如果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语句中就不会有太多重复的代码。

相关内容

  • 没有找到相关文章

最新更新