Об’єднання бритв ASP.NET MVC


95

Я намагаюся відобразити список HTML, який виглядає так, за допомогою механізму подання Razor:

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

Код, який я намагаюся використовувати для відображення цього списку:

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

Синтаксичний аналізатор задихається, оскільки вважає, що все праворуч від підкреслення в атрибуті id є простим текстом, і його не слід аналізувати. Я не впевнений, як доручити аналізатору вивести TheItemId.

Я не хочу, але властивість об'єкта моделі, яка включає префікс item_.

Я також повинен зберігати цей синтаксис, оскільки використовую список із JQuery Sortable та функцією серіалізації, яка вимагає форматування атрибута id у цьому синтаксисі.

Відповіді:


208

Вам слід обернути внутрішню частину дзвінка ( ):

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

3
Я почав із String.Format, але віддаю перевагу синтаксису та стислості вашої відповіді, і я позначаю це як бажану відповідь.
David Marchelya

Я використовую Visual Studio 2013 та ASP.NET MVC 5, і це не працює (рядок встановлений як є , включаючи @і дужки) ... Що, нарешті, спрацювало для мене, було дуже невдячним id="foo" + Model.Bar.
Іван Кемпбелл

Це дало мені змінну в дужках. Здається, Razor тепер розуміє, що підкреслення + змінна = рядок + змінна.
Х'ю

26

Як щодо використання String.Format ? подобається це:

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


Це неправильний синтаксичний аналіз через вкладені подвійні лапки ... чи внутрішні лапки повинні бути одинарними, а зовнішні подвійні лапки, щось на зразок id="@String.Format('foo{0}', item.Bar)"?
Ян Кемпбелл

10

Я віддаю перевагу:

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

Багатослівність повідомляє розробникам підтримки саме те, що відбувається, тому це зрозуміло і легко зрозуміти.


2

Ви навіть можете використовувати цей спосіб для зв’язування більше рядків :

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

Ось ще один допис.

Надія комусь допомагає.



0

Здається, ця публікація застаріла, але зараз це працює зараз в останньому MVC:

id="item_@item.TheItemId"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.