Sementara Microsoft telah membuat beberapa render atribut html secara otomatis di MVC4 silet, saya butuh waktu cukup lama untuk mengetahui cara membuat kelas css kedua pada suatu elemen, berdasarkan pada ekspresi pisau cukur bersyarat. Saya ingin membaginya dengan Anda.
Berdasarkan properti model @ Model.Details, saya ingin menampilkan atau menyembunyikan item daftar. Jika ada detail, div harus ditampilkan, jika tidak, itu harus disembunyikan. Menggunakan jQuery, yang perlu saya lakukan adalah menambahkan pertunjukan kelas atau menyembunyikan, masing-masing. Untuk keperluan lain, saya juga ingin menambahkan kelas lain, "detail". Jadi, mark-up saya seharusnya:
<div class="details show">[Details]</div>
atau <div class="details hide">[Details]</div>
Di bawah ini, saya menunjukkan beberapa upaya gagal (mark-up yang dihasilkan dengan asumsi tidak ada detail).
Ini: <div @(@Model.Details.Count > 0 ? "class=details show" : "class=details hide")>
,
akan membuat ini: <div class="details" hide="">
.
Ini: <div @(@Model.Details.Count > 0 ? "class=\"details show\"" : "class=\"details hide\"")>
.
akan membuat ini: <div class=""details" hide"="">
.
Ini: <div @(@Model.Details.Count > 0 ? "class='details show'" : "class='details hide'")>
akan membuat ini: <div class="'details" hide'="">
.
Tidak ada yang benar mark-up.
sumber
Jawaban:
Saya percaya bahwa masih ada dan logika yang valid pada pandangan. Tetapi untuk hal-hal semacam ini saya setuju dengan @BigMike, lebih baik ditempatkan pada model. Setelah mengatakan bahwa masalah dapat diselesaikan dengan tiga cara:
Jawaban Anda (dengan asumsi ini berfungsi, saya belum mencoba ini):
Opsi kedua:
Opsi ketiga:
sumber
The "div" element was not closed
'ClubsModel' does not contain a definition for 'ClubsFilter' and no extension method 'ClubsFilter' accepting a first argument of type 'ClubsModel' could be found (are you missing a using directive or an assembly reference?)
Ini:
akan membuat ini:
dan mark-up yang saya inginkan.
sumber
@Model.Details.Count > 0
. misalnya<div class="details @(@Model.HasDetails ? "show" : "hide")">
Anda dapat menambahkan properti ke model Anda sebagai berikut:
dan kemudian tampilan Anda akan lebih sederhana dan tidak mengandung logika sama sekali:
Ini akan berfungsi bahkan dengan banyak kelas dan tidak akan membuat kelas jika itu nol:
dengan 2 bukan null properti akan merender:
jika class1 adalah nol
sumber
Anda dapat menggunakan fungsi String.Format untuk menambahkan kelas kedua berdasarkan kondisi:
sumber