Rangkaian Razor ASP.NET MVC

95

Saya mencoba membuat daftar HTML yang terlihat seperti berikut, menggunakan mesin tampilan Razor:

<ul>
  <li id="item_1">Item 1</li>
  <li id="item_2">Item 2</li>
</ul>

Kode yang saya coba gunakan untuk membuat daftar ini adalah:

<ul>
@foreach (var item in Model.TheItems)
{            
  <li id="[email protected]">Item @item.TheItemId</li>
}
</ul>

Pengurai tersedak, karena berpikir bahwa semua yang ada di sebelah kanan garis bawah dalam atribut id adalah teks biasa dan tidak boleh diurai. Saya tidak yakin bagaimana menginstruksikan parser untuk merender TheItemId.

Saya tidak ingin tetapi properti pada objek model yang menyertakan awalan item_.

Saya juga harus mempertahankan sintaks ini karena saya menggunakan daftar dengan JQuery Sortable dan dengan fungsi serialisasi yang memerlukan atribut id untuk diformat dalam sintaks ini.

David Marchelya
sumber

Jawaban:

208

Anda harus membungkus bagian dalam panggilan dengan ( ):

<li id="item_@(item.TheItemId)">
Matthew Abbott
sumber
3
Saya mulai dengan String.Format tetapi lebih memilih sintaks dan singkatnya tanggapan Anda, saya menandainya sebagai jawaban pilihan saya.
David Marchelya
Saya menggunakan Visual Studio 2013 dan ASP.NET MVC 5, dan ini tidak berfungsi (string disetel apa adanya , termasuk @dan tanda kurung) ... Apa yang akhirnya berhasil bagi saya adalah yang sangat tidak terlacak id="foo" + Model.Bar.
Ian Campbell
Ini memberi saya variabel dalam tanda kurung. Tampaknya Razor sekarang memahami bahwa garis bawah + variabel = string + variabel.
Hugh Seagraves
26

Bagaimana kalau menggunakan String.Format ? seperti ini:

<li id="@String.Format("item_{0}", item.TheItemId)">

Filip Ekberg
sumber
Ini tidak diuraikan dengan benar, karena tanda kutip ganda bertingkat ... haruskah tanda kutip dalam berupa tanda kutip tunggal dan tanda kutip ganda bagian luar, kira-kira seperti itu id="@String.Format('foo{0}', item.Bar)"?
Ian Campbell
10

Saya lebih memilih:

<li id="@String.Concat("item_", item.TheItemId)">

Verbositas memberi tahu pengembang dukungan dengan tepat apa yang terjadi, jadi jelas dan mudah dipahami.

Gary Woodfine
sumber
2

Anda bahkan dapat menggunakan cara ini untuk merangkai lebih banyak string :

<li id="@("item-"+item.Order + "item_"+item.ShopID)" class="ui-state-default"></li>

Ini postingan lainnya.

Harapan membantu seseorang.

shaijut
sumber
0

Posting ini tampaknya lebih lama tetapi sekarang ini berfungsi sekarang di MVC terbaru:

id="[email protected]"

sumber