WebFormsビューエンジンでは、特にHTML属性内で、非常に単純な条件に3項演算子を一般的に使用します。例えば:
<a class="<%=User.Identity.IsAuthenticated ? "auth" : "anon" %>">My link here</a>
上記のコードは、ユーザーの認証の有無に応じて<a>
、auth
またはそれにanon
応じてタグをタグに付与します。
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>
それでも、拡張メソッドでラップせずに三項演算子を使用する方法があることを願っています。
IHtmlString
のメソッドnew HtmlString("Some stuff here");
を使用して型を返す必要があると思います...