2011-01-16 23 views
78

Ich versuche, die eine HTML-Liste machen, die wie folgt aussieht, die Razor Ansicht Engine:ASP.NET MVC Razor Verkettungs

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

Der Code, den ich zu verwenden ist versucht, diese Liste zu machen ist :

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

der Parser erstickt, weil es, dass das alles denkt, analysiert auf der rechten Seite des Unterstrichs in das id-Attribut Klartext und nicht werden sollte. Ich bin unsicher, wie man den Parser anweist, TheItemId zu rendern.

Ich möchte nicht, aber eine Eigenschaft auf dem Modellobjekt, das das Präfix item_ enthält.

Ich muss diese Syntax auch beibehalten, da ich die Liste mit JQuery Sortable und mit der Serialisierungsfunktion verwende, die das ID-Attribut benötigt, um in dieser Syntax formatiert zu werden.

Antwort

158

Sie sollten den inneren Teil des Gesprächs mit () wickeln:

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

Ich begann mit String.Format aber bevorzuge die Syntax und Kürze Ihrer Antwort, ich markiere es als meine bevorzugte Antwort. –

+1

Ich habe gerade ein paar Teilansichten von einem Kollegen gemacht und alle String.Formats mit diesem kleinen Rasiermesser-Trick aufgeräumt. Ein am meisten verdientes +1! –

+0

Ich benutze Visual Studio 2013 und ASP.NET MVC 5, und das funktioniert nicht (die Zeichenfolge ist * wie *, einschließlich der '@' und die Klammern) ... Was für mich funktionierte, war das sehr unscheinbar 'id =" foo "+ Model.Bar'. –

25

Wie wäre es mit String.Format? dies wie:

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

+0

String.Format hat den Trick gemacht, Danke! In Ihrer Antwort fehlt nur {0} nach Element_. –

+0

Ops .. :) Sorry, dass, geändert. –

+0

Dies wird nicht korrekt analysiert, wegen verschachtelten doppelten Anführungszeichen ... sollten die inneren Anführungszeichen einfache Anführungszeichen sein und die äußeren doppelten Anführungszeichen, etwas wie 'id =' @ String.Format ('foo {0}', item .Bar) "'? –

7

Ich ziehe:

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

Die Ausführlichkeit die Unterstützung Entwickler genau das, was erzählt wird geschieht, so ist es klar und einfach zu verstehen.

0

Sie können auch auf diese Weise concat mehr Strings verwenden:

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

Here ein weiterer Beitrag ist.

Hoffnung hilft jemandem.