2011-01-16 14 views
78

Próbuję tynku listę HTML, który wygląda następująco, przy użyciu silnika widoku Razor:ASP.NET MVC Razor Łączenie

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

Kod że jestem próbuje użyć do renderowania ta lista jest :

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

parser jest zadławienia, ponieważ uważa, że ​​to wszystko na prawo od podkreślenia w atrybucie id jest zwykły tekst i nie powinien być analizowany. Nie jestem pewien, w jaki sposób polecić analizator składni, aby renderować TheItemId.

Nie chcę, ale właściwość obiektu modelu, który zawiera prefiks item_.

Muszę również zachować tę składnię, ponieważ używam listy z JQuery Sortable oraz z serializowaną funkcją, która wymaga sformatowania atrybutu id w tej składni.

Odpowiedz

158

należy owinąć wewnętrzną część rozmowy z ():

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

Zacząłem od String.Format, ale preferuję składnię i zwięzłość odpowiedzi, zaznaczam ją jako preferowaną odpowiedź. –

+1

Właśnie przeszedł kilka częściowych widoków od współpracownika i wyczyścił wszystkie String.Formats z tą małą sztuczką z brzytwą. Największy zarobiony +1! –

+0

Używam Visual Studio 2013 i ASP.NET MVC 5, a to nie działa (ciąg jest ustawiony * tak jak jest *, w tym '@' i nawiasów) ... Co w końcu zadziałało dla mnie było bardzo niewygodny 'id =" foo "+ Model.Bar'. –

25

Jak korzystać z String.Format? tak:

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

+0

String.Format wykonał lewę, dzięki! Po prostu brakuje ci {0} po item_ w twojej odpowiedzi. –

+0

Ops .. :) Przepraszamy, zmieniono. –

+0

To nie jest poprawnie analizowane, z powodu zagnieżdżonych podwójnych cudzysłowów ... jeśli wewnętrzne cudzysłowy będą pojedynczymi cudzysłowami i zewnętrznymi podwójnymi cudzysłowami, np. "Id =" @ String.Format ("foo {0}", element .Bar) "'? –

7

wolę:

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

gadatliwość mówi deweloperów wsparcia dokładnie to, co jest dzieje się tak, aby było jasne i łatwe do zrozumienia.

0

Można nawet użyć tego sposobu na concat więcej ciągów:

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

Here jest kolejny post.

Nadzieja pomaga komuś.

Powiązane problemy