ASP.NET MVC Конкатенация бритв - PullRequest
87 голосов
/ 16 января 2011

Я пытаюсь визуализировать список 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 был отформатирован в этом синтаксисе.

Ответы [ 4 ]

184 голосов
/ 16 января 2011

Вы должны заключить внутреннюю часть разговора в ( ):

<li id="item_@(item.TheItemId)">
25 голосов
/ 16 января 2011

Как насчет использования String.Format ?как это:

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

9 голосов
/ 28 августа 2013

Я предпочитаю:

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

Многословие сообщает разработчикам поддержки, что именно происходит, поэтому все понятно и просто.

2 голосов
/ 30 июля 2016

Вы даже можете использовать этот способ для согласования большего количества строк :

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

Здесь другой пост.

Надежда помогает кому-то.

...