2011-01-16 7 views
78

Я пытаюсь вынести список HTML, который выглядит следующим образом, используя представление Бритвы двигателя:ASP.NET MVC Razor Concatenation

<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="[email protected]">Item @item.TheItemId</li> 
} 
</ul> 

анализатор удушья, потому что он считает, что все, что справа от подчеркивания в атрибуте идентификатор обычного текста и не должны быть разобраны. Я не знаю, как заставить парсер отображать TheItemId.

Я не хочу, но свойство объекта модели, которое включает префикс item_.

Мне также нужно сохранить этот синтаксис, поскольку я использую список с JQuery Sortable и с помощью функции сериализации, для которой атрибут id должен быть отформатирован в этом синтаксисе.

ответ

158

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

<li id="[email protected](item.TheItemId)"> 
+3

Я начал с String.Format, но предпочитаю синтаксис и краткость вашего ответа, я отмечаю его как свой предпочтительный ответ. –

+1

Просто просмотрел несколько частичных просмотров от сотрудника и очистил все String.Formats с помощью этой маленькой хитрости. Самый заработанный +1! –

+0

Я использую Visual Studio 2013 и ASP.NET MVC 5, и это не работает (строка установлена ​​* как есть *, включая '@' и круглые скобки) ... Что, наконец, работало для меня, было очень ungraceful 'id =" foo "+ Model.Bar'. –

25

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

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

+0

String.Format сделал трюк, спасибо! Вам просто не хватает {0} после пункта_ в вашем ответе. –

+0

Ops .. :) Извините, что это изменилось. –

+0

Это не правильно разобрано из-за вложенных двойных кавычек ... если внутренние кавычки являются одиночными кавычками и внешними двойными кавычками, что-то вроде 'id =" @ String.Format ('foo {0}', item .bar) "'? –

7

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

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

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

0

Вы можете даже использовать этот способ CONCAT более строк:

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

Here еще один пост.

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