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="item_@item.TheItemId">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.

Jawaban:


208

Anda harus membungkus bagian dalam panggilan dengan ( ):

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

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)">


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.


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.


1

Anda dapat melakukannya dengan cara yang lebih sederhana:

id="item_@item.TheItemId"

0

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

id="item_@item.TheItemId"
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.