Dengan mesin tampilan WebForms, saya biasanya akan menggunakan operator ternary untuk persyaratan yang sangat sederhana, terutama di dalam atribut HTML. Sebagai contoh:
<a class="<%=User.Identity.IsAuthenticated ? "auth" : "anon" %>">My link here</a>
Kode di atas akan memberikan <a>
tag kelas auth
atau anon
tergantung pada apakah pengguna diautentikasi.
Apa sintaksinya yang setara dengan mesin tampilan Razor? Karena Razor memerlukan tag HTML untuk "tahu" kapan harus masuk dan keluar dari kode dan markup, saya saat ini terjebak dengan yang berikut:
@if(User.Identity.IsAuthenticated) { <a class="auth">My link here</a> }
else { <a class="anon">My link here</a> }
Ini, secara sederhana, mengerikan .
Saya ingin melakukan sesuatu seperti ini, tetapi saya berjuang untuk memahami caranya dalam Razor:
<a class="@=User.Identity.IsAuthenticated ? "auth" : "anon";">My link here</a>
-
Memperbarui:
Sementara itu, saya telah membuat HtmlHelper ini:
public static MvcHtmlString Conditional(this HtmlHelper html, Boolean condition, String ifTrue, String ifFalse)
{
return MvcHtmlString.Create(condition ? ifTrue : ifFalse);
}
yang bisa disebut seperti ini dari Razor:
<a class="@Html.Conditional(User.Identity.IsAuthenticated, "auth", "anon")">My link here</a>
Tetap saja, saya berharap ada cara untuk menggunakan operator ternary tanpa harus kembali membungkusnya dengan metode ekstensi.
IHtmlString
dengan metodenew HtmlString("Some stuff here");
untuk pembantu dll ...