Оператор условного if Blazor для onclick

Sep 04 2020

У меня есть диапазон, который должен иметь атрибут onclick, если IsActive bool истинно. В противном случае у диапазона не должно быть атрибута onclick.

например

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

Есть ли способ избежать повторения кода с помощью тернарного оператора? например

@(IsActive == true ? "add onclick method somehow?" : "")

Ответы

4 GaryChan Sep 05 2020 at 13:13

Вы можете сделать следующее.

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

Lambda Выражение это то , что я думаю , что вы действительно ищете.

9 Umair Sep 04 2020 at 17:02

Лучше всего добавить условие IsActive == trueв Go.DoSomethingметоде. Но в идеале я бы использовал кнопку, если ее можно щелкнуть, потому что мы можем добавить disabledатрибут к кнопке, в вашем случае вы можете добавить условие внутри onclickметода.

Просто подсказка для кнопки, вы можете просто добавить свое логическое свойство С # в этот атрибут следующим образом:

<button disabled="@IsActive">Save</button>
2 devbf Sep 04 2020 at 18:36

Просто хочу добавить что-то для людей, у которых есть похожая проблема:

Если у вас больше HTML-кода, чем в одном диапазоне, и он понадобится вам дважды из-за оператора if-else, я бы создал собственный компонент Blazor (например, MyComponent.razor) и использовал параметры компонента. Таким образом, у вас не будет большого количества повторяющегося кода в выражении if-else.