如何解决Blazor条件if语句onclick
我有一个跨度,如果IsActive bool为true,则应具有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?" : "")
解决方法
添加条件IsActive == true
的更好方法是使用Go.DoSomething
方法。但理想情况下,我会使用按钮是否可点击,因为我们可以向按钮添加disabled
属性,在您的情况下,您可以在onclick
方法内添加条件。
按钮的提示,您可以像这样在属性中添加c#布尔属性:
<button disabled="@IsActive">Save</button>
,
您可以执行以下操作。
<span @onclick="@(e => { if (IsActive) Go.DoSomething("please");})">
@s
</span>
Lambda Expression是我真正想要的。
,只想为遇到类似问题的人添加一些东西:
如果您的HTML代码多于单个跨度,并且由于if-else语句而需要两次,那么我将创建一个自己的Blazor组件(例如MyComponent.razor)并使用组件参数。 这样,在if-else语句中就不会有太多重复的代码。
,其他答案有点错误。将事件方法注册为 lambda 和在没有必要时不注册事件是有区别的。
如果您将条件移动到 lambda 函数,则任何时候有人单击您的方法都会运行。这会对您的应用产生性能影响,特别是如果它是 Blazor 服务器,因为往返必须发生并且逻辑发生在您的服务器上。
@ondclick=@(Active?() => Go.DoSomething:null)
如果该事件未处于活动状态,则不会注册该事件,因此您的服务器上没有负载。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。