ASP.NET MVC Razor-Verkettung

95

Ich versuche, mithilfe der Razor-Ansichts-Engine eine HTML-Liste zu rendern, die wie folgt aussieht:

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

Der Code, den ich zum Rendern dieser Liste verwenden möchte, lautet:

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

Der Parser verschluckt sich, weil er der Meinung ist, dass alles rechts vom Unterstrich im id-Attribut einfacher Text ist und nicht analysiert werden sollte. Ich bin mir nicht sicher, wie ich den Parser anweisen soll, TheItemId zu rendern.

Ich möchte nur eine Eigenschaft für das Modellobjekt, die das Präfix item_ enthält.

Ich muss diese Syntax auch beibehalten, da ich die Liste mit JQuery Sortable und mit der Serialisierungsfunktion verwende, für die das id-Attribut in dieser Syntax formatiert werden muss.

David Marchelya
quelle

Antworten:

207

Sie sollten den inneren Teil des Anrufs mit ( )folgenden Zeilen umschließen :

<li id="item_@(item.TheItemId)">
Matthew Abbott
quelle
3
Ich habe mit String.Format begonnen, bevorzuge aber die Syntax und Kürze Ihrer Antwort. Ich markiere sie als meine bevorzugte Antwort.
David Marchelya
Ich verwende Visual Studio 2013 und ASP.NET MVC 5, und dies funktioniert nicht (die Zeichenfolge wird so wie sie ist festgelegt , einschließlich der @und der Klammern) ... Was für mich schließlich funktioniert hat, war die sehr unanständige id="foo" + Model.Bar.
Ian Campbell
Dies gab mir die Variable in Klammern. Es scheint, dass Razor jetzt versteht, dass ein Unterstrich + eine Variable = eine Zeichenfolge + eine Variable.
Hugh Seagraves
26

Wie wäre es mit String.Format ? so was:

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

Filip Ekberg
quelle
Dies wird aufgrund verschachtelter Anführungszeichen nicht korrekt analysiert. Sollten die inneren Anführungszeichen einfache Anführungszeichen und die äußeren doppelten Anführungszeichen sein id="@String.Format('foo{0}', item.Bar)"?
Ian Campbell
10

Ich bevorzuge:

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

Die Ausführlichkeit sagt den Support-Entwicklern genau, was gerade passiert, sodass es klar und leicht zu verstehen ist.

Gary Woodfine
quelle
2

Sie können sogar auf diese Weise mehr Zeichenfolgen zusammenfassen :

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

Hier ist ein weiterer Beitrag.

Hoffnung hilft jemandem.

Shaijut
quelle
0

Dieser Beitrag scheint älter zu sein, aber jetzt funktioniert dies in der neuesten MVC:

id="[email protected]"

quelle