442

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

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

上記のコードは、ユーザーが認証されているかどうかに応じて、またはに応じて<a>タグにクラスを与えます。authanon

Razor ビュー エンジンと同等の構文は何ですか? Razor では、HTML タグがコードとマークアップにいつジャンプするかを「認識する」必要があるため、現在、次のことで行き詰まっています。

@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>

それでも、拡張メソッドでラップすることにフォールバックせずに三項演算子を使用する方法があることを願っています。

4

7 に答える 7

844

@()式の構文を使用できるはずです。

<a class="@(User.Identity.IsAuthenticated ? "auth" : "anon")">My link here</a>
于 2010-11-03T22:22:52.693 に答える
65

補遺:

重要な概念は、Razor コードで式を評価しているということです。これを行う最善の方法 (たとえば、foreach ループにいる場合) は、ジェネリック メソッドを使用することです。

Razor でジェネリック メソッドを呼び出す構文は次のとおりです。

@(expression)

この場合、式は次のとおりです。

User.Identity.IsAuthenticated ? "auth" : "anon"

したがって、解決策は次のとおりです。

@(User.Identity.IsAuthenticated ? "auth" : "anon")

このコードは、html 属性だけでなく、Razor のどこでも使用できます。

C# Razor Syntax Quick Reference (Phil Haack のブログ) に対する @Kyralessa のコメントを参照してください。

于 2011-11-16T11:36:15.597 に答える
27

見やすいシンプルバージョン!

@(true?"yes":"no")
于 2012-01-22T15:57:49.677 に答える
18

VB razor で ASP.net を使用している場合は、三項演算子も使用できます。

同様に、カミソリ式内にある必要があります。

@(Razor_Expression)

三項演算子は次のように機能します。

If(BooleanTestExpression, "TruePart", "FalsePart")

ここで示した VB razor を使用した同じコード例は、次のようになります。

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

注: TextExpression を記述するときは、C# と VB の間でブール記号が同じではないことに注意してください。

于 2012-11-07T14:33:46.093 に答える
1

次の方法も使用できます。

<input type="text" class="@(@mvccondition ? "true-class" : "false-class")">

これを試してください..頑張ってくださいありがとう。

于 2016-11-22T07:54:02.460 に答える