Asp.net core onclick的Blazor条件if语句

Asp.net core onclick的Blazor条件if语句,asp.net-core,razor,blazor,blazor-server-side,Asp.net Core,Razor,Blazor,Blazor Server Side,我有一个span,如果IsActive bool为true,它应该具有onclick属性。 否则,范围不应有onclick属性 e、 g 添加条件IsActive==true的更好方法是使用Go.DoSomething方法。但理想情况下,如果按钮可单击,我会使用按钮,因为我们可以为按钮添加disabled属性,在您的情况下,您可以在onclick方法中添加条件 只需提示一下按钮,您可以在该属性中添加c#boolean属性,如下所示: <button disabled="@IsAc

我有一个span,如果IsActive bool为true,它应该具有onclick属性。 否则,范围不应有onclick属性

e、 g


添加条件
IsActive==true
的更好方法是使用
Go.DoSomething
方法。但理想情况下,如果按钮可单击,我会使用按钮,因为我们可以为按钮添加
disabled
属性,在您的情况下,您可以在
onclick
方法中添加条件

只需提示一下按钮,您可以在该属性中添加c#boolean属性,如下所示:

<button disabled="@IsActive">Save</button>
保存

只想为有类似问题的人添加一些东西:

如果您的HTML代码多于一个span,并且由于If-else语句而需要它两次,那么我将创建自己的Blazor组件(例如MyComponent.razor)并使用组件参数。
这样,if-else语句中就不会有太多重复的代码。

您可以执行以下操作

<span @onclick="@(e => { if (IsActive) Go.DoSomething("please");})">
    @s
</span>

@

A是我认为你真正想要的。

其他答案有点错误。将事件方法注册为lambda与不注册事件(如果没有必要)之间存在差异

如果您将条件移动到lambda函数,任何时候有人单击您的方法都将运行。这将对您的应用程序的性能产生影响,特别是如果它是Blazor服务器,因为往返必须发生,并且逻辑发生在您的服务器上

@ondclick=@(Active?() => Go.DoSomething:null)
如果事件未处于活动状态,则不会注册该事件,因此不会在服务器上加载

@ondclick=@(Active?() => Go.DoSomething:null)

from

Thank-最终转换为按钮并使用disabled属性更新答案以添加一个小提示,因为您正在使用上下文中的按钮,我认为它应该是
disabled=“@(!IsActive)”
。好的选择。alsoI希望有人能回答这个问题并避免所有不必要的绑定。问题:那么在添加了一个组件之后,我们仍然在其中使用if/else?这不是同一件事吗?不一定相同,例如,您可以创建一个名为color的组件参数,并在if语句中用color=blue调用它,在else语句中用color=green调用它。您还需要if-else语句,这是真的。此解决方案不像三元运算符,但它可能会为您节省一些有关组件大小的代码行。主页中的代码确实会减少,但“如果”新组件未在项目中的任何其他地方共享,则仍然是一样的。这是不一样的,特别是如果它是Blazor server,在问题示例中,请求不会命中服务器。在您的示例中,它们会对性能产生影响。@koolaang您能澄清一下“不一样”是什么意思吗?根据文档(),UI事件是从浏览器发送到服务器的。如果浏览器通过信号器连接到后端服务器,我会假设所有Blazor事件都会发生。但是如果没有UI,服务器就没有流量。这就是我的全部观点。使用这种方法,您不会注册UI事件。
@ondclick=@(Active?() => Go.DoSomething:null)