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="item_@item.TheItemId">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.

Antworten:


207

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

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

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)">


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.


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.



0

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

id="item_@item.TheItemId"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.