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.
sumber
IHtmlString
dengan metodenew HtmlString("Some stuff here");
untuk pembantu dll ...Jawaban:
Anda harus dapat menggunakan
@()
sintaks ekspresi:Saya tidak menginstal Razor, jadi saya bisa salah.
sumber
Tambahan:
Konsep penting adalah Anda mengevaluasi ekspresi dalam kode Razor Anda. Cara terbaik untuk melakukan ini (jika, misalnya, Anda berada di loop foreach) menggunakan metode generik.
Sintaks untuk memanggil metode generik dalam Razor adalah:
Dalam hal ini, ungkapannya adalah:
Oleh karena itu, solusinya adalah:
Kode ini dapat digunakan di mana saja di Razor, bukan hanya untuk atribut html.
Lihat komentar @Kyralessa untuk Referensi Cepat C # Razor Syntax (blog Phil Haack).
sumber
Versi yang lebih sederhana, untuk mata yang mudah!
sumber
Bagi Anda yang menggunakan ASP.net dengan pisau cukur V, operator ternary juga memungkinkan.
Itu juga harus di dalam ekspresi pisau cukur:
dan operator ternary bekerja sebagai berikut:
Contoh kode yang sama ditunjukkan di sini dengan pisau cukur VB terlihat seperti ini:
Catatan: saat menulis TextExpression ingat bahwa simbol Boolean tidak sama antara C # dan VB.
sumber
dalam masalah saya, saya ingin teks jangkar
<a>text</a>
di dalam pandangan saya didasarkan pada beberapa nilai dan teks itu diambil bentuknyaApp string Resources
jadi, ini
@()
solusinyajika teks tidak
App string Resources
digunakan inisumber
Anda juga dapat menggunakan metode ini:
Coba ini .. Semoga berhasil, Terima kasih.
sumber