1. ホーム
  2. razor

[解決済み] razor で三項演算子を使用するには (特に HTML 属性について)?

2022-03-21 13:07:26

質問

WebForms のビューエンジンでは、特に HTML 属性内の非常に単純な条件文に三項演算子をよく使用します。例えば

<a class="<%=User.Identity.IsAuthenticated ? "auth" : "anon" %>">My link here</a>

上記のコードでは <a> タグのクラスは auth または anon は、ユーザーが認証されているかどうかによって異なります。

Razor のビューエンジンで同等の構文とは何ですか?RazorはHTMLタグにコードとマークアップのジャンプのタイミングを"know"要求するので、私は現在次のように行き詰っています。

@if(User.Identity.IsAuthenticated)  { <a class="auth">My link here</a> }
else { <a class="anon">My link here</a> }

これは、控えめに言っても ひどい .

ぜひともやりたいこと のように しかし、Razorでの方法を理解するのに苦労しています。

<a class="@=User.Identity.IsAuthenticated ? "auth" : "anon";">My link here</a>

--

更新しました。

とりあえず、こんなHtmlHelperを作りました。

public static MvcHtmlString Conditional(this HtmlHelper html, Boolean condition, String ifTrue, String ifFalse)
{
  return MvcHtmlString.Create(condition ? ifTrue : ifFalse);
}

であり、Razor からはこのように呼び出すことができます。

<a class="@Html.Conditional(User.Identity.IsAuthenticated, "auth", "anon")">My link here</a>

それでも、三項演算子を拡張メソッドでラップすることなく使用する方法があることを期待しています。

解決方法は?

を使用する必要があります。 @() 式の構文です。

<a class="@(User.Identity.IsAuthenticated ? "auth" : "anon")">My link here</a>